gpt4 book ai didi

ruby - 我们可以覆盖 Ruby 中的 true 和 false 方法吗?

转载 作者:行者123 更新时间:2023-12-03 16:58:50 25 4
gpt4 key购买 nike

是否可以覆盖 boolean 方法,如 truefalse在 ruby ?
例如

def true
rand()
end

def false
rand()
end

true #=> 0.7548583661438558
false #=> 0.19239076750079454
如果我尝试以上操作,我会得到:
true  #=> true
false #=> false
我试图了解这些 true 在哪里, false方法被定义。
我知道 &&||不能被覆盖,因为 &&||是短路运营商。
truefalse相似的?或者它们是写在 Ruby 中的某个地方?
我只是在试验 Ruby。

最佳答案

truefalse不能被覆盖,因为它们是 keywords ,不是方法。它们的值是硬编码的,无法重新分配不同的值。 (至少不是来自 Ruby 内部)
即使在实现具有相同名称的方法时,文字 true仍将解析为内置值。

你可以做的是改变对象,true正在解决有趣的结果:(这只是为了好玩,不要在实际代码中这样做)

def true.inspect
rand.to_s
end

true #=> 0.8499100640573652
true #=> 0.22279583303254913
然而,上面的例子实际上并没有改变 true 的值。以任何方式。还有,别想 true作为方法调用,每次调用时都会返回一个随机浮点数。我们正在查看相同的对象:
a = true

a #=> 0.5813338288658235
a #=> 0.6447125630746154
我们所做的是通过覆盖 inspect 来改变它的表示。 , 哪一个:

Returns a string containing a human-readable representation of obj.


我们看到这些 float 是因为 IRB 调用了 inspect试图以可读的方式打印最后一个表达式的结果。
如果我们将 IRB 的输出模式设置为 :to_s ,我们的更改被绕过,我们看到 true再次:
IRB.CurrentContext.inspect_mode = :to_s

a #=> true
true #=> true

关于ruby - 我们可以覆盖 Ruby 中的 true 和 false 方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64168212/

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