gpt4 book ai didi

ruby - Ruby 方法 instance_eval() 和 send() 不会否定私有(private)可见性的好处吗?

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

w = Widget.new # Create a Widget
w.send :utility_method # Invoke private method!
w.instance_eval { utility_method } # Another way to invoke it
w.instance_eval { @x } # Read instance variable of w

查看上面与 Widget 类(下方)相关的示例,send 和 instance_eval 方法违反了私有(private)和 protected 可见性提供的所有保护。如果是这样,为什么要在 Ruby 中使用私有(private)和 protected 访问,因为不能保证您的定义会得到遵守?

class Widget
def x # Accessor method for @x
@x
end
protected :x # Make it protected
def utility_method # Define a method
nil
end
private :utility_method # And make it private
end

最佳答案

ruby 坚信赋予您做自己想做的事的力量。它只是不容易不经意地让您大吃一惊-如果您想破坏私有(private)声明,则必须使用清楚表明您正在这样做的语法。请注意,最终决定代码应该做什么或不应该做什么的人是使用库的人,而不是编写它的人。

关于ruby - Ruby 方法 instance_eval() 和 send() 不会否定私有(private)可见性的好处吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/896606/

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