0
考慮導入到本地範圍
# 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
的調用者的範圍內,並且它們在不再被引用時會額外獲取垃圾回收?
這是行不通的。方法和類從未被垃圾收集。假設他們將通過他們最有可能的整個計劃被需要。 – Linuxios
@Linuxios:類是彼此相似的對象。如果沒有對它們的引用,它們就會像其他所有對象一樣收集垃圾。方法本身並不是對象,因此,「垃圾收集」這些概念沒有意義,但它們存儲在類(或模塊)中,所以當包含模塊進行垃圾回收時,它們的內存將被釋放。 –
@JörgWMittag:是的,但只要一個類被它的「名稱」(引用它的常量)引用,它就會存在。分配一個常量是不好的形式,並引發一個警告(這應該很快會變成一個錯誤)。所以一個常數所指的類可以通過良好的形式被認爲是永久性的。這並沒有改變這樣的事實,即任何實施這種做法的東西最多都是黑客。也許我會試試! :)。 – Linuxios