2013-08-26 66 views

回答

2

如果你引用的是真正的來源,那麼它缺乏準確性。在準確使用這些術語的情況下,這確實是矛盾的。

但是,人們(不正確)使用術語Module來表示「Module不是Class」。在這個意義上,這大概是什麼意思,寫什麼是不矛盾的。

3

模塊可以有狀態,BRU

module Foo 

    @state = "a" 

    def self.state 
    @state 
    end 

    def self.stateful 
    @state = "b" 
    end 

end 

看!

Foo.state # a 
Foo.stateful # b 
Foo.state # b 
4

哦兄弟,如果你忘記模塊/類的實例變量和模塊/類方法,你甚至不能說是類保持狀態 - 因爲它的持有狀態類的實例。類包含實例方法的列表。所以關於課程的整個部分在技術上也是錯誤的。

底線是紅寶石中99.99%的東西是對象,任何對象都可以保持狀態。類是對象(也是對象的生產者),模塊是對象(但不是對象的生產者),類的實例是對象。

我建議你不要擔心狀態。只是集中在該模塊能夠用於兩點的事實:

1)作爲名稱空間:

module MyFunctions 
    def MyFunctions.puts(str) #...or: def self.puts(str) 
    Kernel.puts "***" + str 
    end 
end 

puts 'hello' 
MyFunctions.puts 'hello' 

--output:-- 
hello 
***hello 

2)作爲包的方法包括,例如在一個類別:

module AnimalTricks 
    def speak 
    puts @noise 
    end 
end 

class Dog 
    include AnimalTricks 

    def initialize 
    @noise = "woof" 
    end 

end 


class Mouse 
    include AnimalTricks 

    def initialize 
    @noise = "sqeak" 
    end 

end 

Dog.new.speak 
Mouse.new.speak 

--output:-- 
woof 
sqeak 
+0

*朋友*我有一個疑問。你能幫我嗎 ?我沒有看到[File#ctime](http://www.ruby-doc.org/core-2.0.0/File.html#method-i-ctime)和[File#mtime](http ://www.ruby-doc.org/core-2.0.0/File.html#method-i-mtime)。你可以幫幫我嗎 ? :) –