1

以下代码:

class Avalon 
  def h
    puts "petrezselyem"
  end
end
Avalon.new.h

打印出来"petrezselyem"。但是,如果我输入:

puts Avalon.new.h.size

它给

undefined method `size' for nil:NilClass (NoMethodError).

你能解释一下这种行为吗?

4

2 回答 2

6

该方法h不返回"petrezselyem",它打印出来"petrezselyem"。所以Avalon.new.h == nil

Java 会给你一个编译错误,但是像 Ruby 这样的动态语言不知道返回的类型。

于 2012-05-25T13:02:04.480 回答
5

查看Kernel#puts的签名:

puts(obj, ...) → nil

这意味着puts将始终返回nil,因为它是方法中的最后一条语句h,这也将是该方法的返回值。

于 2012-05-25T13:24:29.833 回答