考虑
# sun.rb
class Sunshine
def bright?
return true
end
end
def greeting(greeter)
puts "hello, Sun from #{greeter}"
end
# main.rb
def abc
my_load "sun.rb"
greeting("abc")
return Sunshine.new
end
s = abc
puts s.bright?
greeting("Adrian")
...
我可以在这里my_load
greeting("abc")
调用成功,但后者greeting("Adrian")
会导致NoMethodError;但puts s.bright?
电话成功。
所以,综合来说:sun.rb中的类,方法都在my_load
调用者的范围内,所以当不再引用时,它们还会被垃圾收集?
答案 0 :(得分:2)
首先,独立(在main
对象上调用)方法调用将导致NameError
异常(如果它不存在)。只有在对象上调用方法时,才会得到NoMethodError
。
nothing #=> NameError
class A; end
A.nothing #=> NoMethodError
这是因为当您在nothing
上调用main
时,它不知道它是方法还是变量。但是:
nothing() #=> NoMethodError
因为()
它现在知道它是你试图调用的方法。需要注意的事项。
其次,如果您希望方法有效,然后无法使用,请使用undef
。
def greeting(name)
puts "Hello, #{name}"
end
greeting("Chell") #=> "Hello, Chell"
undef greeting
greeting("Chell") #=> NoMethodError