gpt4 book ai didi

ruby - Ruby 中的模块和类。矛盾?

转载 作者:数据小太阳 更新时间:2023-10-29 08:18:35 25 4
gpt4 key购买 nike

根据 RubyMonk section 8.1模块只保存行为而不保存状态,类可以保存行为和状态。

然而,模块是 Ruby 中类的父类(super class)。怎么会这样?

最佳答案

哦兄弟,如果你忘了模块/类实例变量和模块/类方法,你甚至不能说类保持状态——因为它是保持状态的类的实例。类包含实例方法列表。所以关于类的整个部分在技术上也是错误的。

底线是 ruby​​ 中 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

关于ruby - Ruby 中的模块和类。矛盾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18439241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com