红宝石火车残骸

Cro*_*roo 1 ruby

以下代码:

class Avalon 
  def h
    puts "petrezselyem"
  end
end
Avalon.new.h
Run Code Online (Sandbox Code Playgroud)

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

puts Avalon.new.h.size
Run Code Online (Sandbox Code Playgroud)

它给

undefined method `size' for nil:NilClass (NoMethodError).
Run Code Online (Sandbox Code Playgroud)

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

Gar*_*all 6

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

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


Mic*_*ohl 5

看看Kernel#puts的签名:

puts(obj, ...) ? nil
Run Code Online (Sandbox Code Playgroud)

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