"hello-6ren">
gpt4 book ai didi

ruby - 定义 `to_i` 以便隐式调用

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

在类上定义 to_s 的效果与我预期的一样:

class Foo
def to_s
"Joe"
end
end

f = Foo.new
"hello #{f}" # => "hello Joe"

我尝试利用 to_i 并期望它以类似的方式工作。我希望通过将 to_i 定义为一个数字,然后在任何需要数字的地方,该对象将返回该数字来代替该对象;在类似下面的情况下,我希望它返回整数 5。相反,它会引发错误:

class Foo
def to_i
0
end
end

f = Foo.new
5 + f # => TypeError: Foo can't be coerced into Fixnum

定义 to_i 会启用什么?你如何利用它?我可以将此对象隐式表示为整数并返回 0 就像对象隐式返回字符串 "Joe" 一样吗?

最佳答案

这两种情况的关键区别是字符串插值 "#{}" 隐式调用 to_sFixnum#+ 不调用to_i 隐含在其参数上。

定义 to_i 只允许您调用它(明确地)。它是否被隐式调用取决于它的使用位置。您无法仅通过定义 to_i 来使 to_i 被隐式调用。如果你真的要这样做,你必须修改Fixnum#+

关于ruby - 定义 `to_i` 以便隐式调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33072092/

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