gpt4 book ai didi

ruby - 为什么Ruby中 "protected_class_method"类不存在实例方法 "Module"?

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

为什么 Ruby 中的“Module”类不存在实例方法“protected_class_method”,而“Module”类却存在“public_class_method”和“private_class_method”实例方法?

这不遵循为“模块”类定义的“私有(private)”、“ protected ”和“公共(public)”实例方法的模式。

最佳答案

对我来说, protected 方法只有作为实例方法才有意义。

protected 方法可以被同一类的其他实例调用。

class Student
def initialize(age)
@age = age
end
def older_than?(other)
age > other.age
end
protected
def age
@age
end
end

你不能在 Student 实例上直接调用 age

student1 = Student.new(21)

student1.age
NoMethodError: protected method `age' called for #<Student:0x514d058 @age=21>

但是student1可以引用student2的年龄

student2 = Student.new(23)

student2.older_than?(student1)
=> true

因此您可以看到一个实例的 protected 方法的唯一性是如何从另一个实例引用它的能力。

我看不出你会如何使用类“ protected 方法”...没有与上述类似的场景。

编辑

感谢 Cary Swoveland 彻底打乱了我的思想,我意识到你可以做以下事情......

class Class
def show_k(klass)
klass.k
end
protected
def k
"This is k"
end
end

现在如果我这样做

String.k 
NoMethodError: protected method `k' called for String:Class

但如果我这样做...

Integer.show_k(String)
=> "This is k"

可能是因为类是 Class 类的实例。

我仍然不确定我将如何使用它,但你去吧。

关于ruby - 为什么Ruby中 "protected_class_method"类不存在实例方法 "Module"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48529615/

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