以下代码:
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)
你能解释一下这种行为吗?
该方法h不返回"petrezselyem",打印出来"petrezselyem".所以Avalon.new.h == nil.
Java会给你一个编译错误,但像Ruby这样的动态语言不知道返回的类型.
看看Kernel#puts的签名:
puts(obj, ...) ? nil
Run Code Online (Sandbox Code Playgroud)
这意味着puts将始终返回nil,因为它是方法中的最后一个语句h,这也将是该方法的返回值.