gpt4 book ai didi

ruby - 这是违反 ruby​​ 封装的简单方法吗?

转载 作者:太空宇宙 更新时间:2023-11-03 17:45:04 27 4
gpt4 key购买 nike

class Foo
@@first_time = true

def self.private_bar
if @@first_time
puts "Hi"
else
puts "Oi, you don't work here"
end
@@first_time = false
end

private_class_method :private_bar

public
def calling_private_method
self.class.send :private_bar
another_private_bar
end
end

f=Foo.new
f.calling_private_method
f.class.send :private_bar

输出应该是这样的:

Hi
NoMethodError: private method `private_bar'

但是,输出是:

Hi
Oi, you don't work

为什么会这样?这一定是个bug,否则就是严重违反了信息封装,对吧?

最佳答案

您对一种可以让您编写的语言有何期望

String = Array
puts String.new.inspect
#=> []

class Fixnum
def +(b)
self-b
end
end

puts 1+2
#=> -1

?

更重要的是,在 Ruby 中几乎没有什么是被禁止的:它使试验和学习 Ruby 内部工作变得更容易。在某些情况下,它可以编写更简洁的代码或获得使用更严格的语言更难或不可能重现的“神奇”行为。

在您的示例中,可以调用私有(private)方法,但您不能使用通常的语法。

关于ruby - 这是违反 ruby​​ 封装的简单方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40596121/

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