gpt4 book ai didi

ruby try_convert 类方法不转换

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

在 String 类(版本 2.2.0)的 ruby​​ 文档中,我找到了类方法“try_convert”,引用文档本身应该这样做:

Try to convert obj into a String, using #to_str method. Returns converted string or nil if obj cannot be converted for any reason.

所以我决定对其进行测试,并使用以下代码和结果完成了它。

require 'bigdecimal'

z=BigDecimal.new "12.4"
puts z
zc=String.try_convert(z)

i=365
ic=String.try_convert(i)

puts "Test of try_convert on a bigdecimal. The result is: #{zc.nil? ? 'nil' : zc }"
puts "While, the #to_s method on z returns: #{z.to_s}"

puts "The integer i, converted with try_convert is: #{ic.nil? ? 'nil' : ic}"
puts "While, the #to_s method on i returns: #{i.to_s}"

class MyClass
end

c=MyClass.new
cc=String.try_convert(c)
puts "Test of try_convert on a custom class. The result is: \"#{cc.nil? ? 'nil' : cc}\""
puts "While, the #to_s method on c returns \"#{c.to_s}\""

结果:

在 bigdecimal 上测试 try_convert。结果是:
同时,z 上的#to_s 方法返回:0.124E2

整数i,用try_convert转换为:nil
而 i 上的 #to_s 方法返回:365

在自定义类上测试 try_convert。结果是:“
而 c 上的 #to_s 方法返回 #

所以我很困惑:一开始,在我看来很明显 try_convert 会尝试调用参数的 to_s 方法,但这个例子似乎表明这不是真的。我错过了什么?这个方法有什么用?

最佳答案

try_convert 实际上尝试在参数上调用 to_str,而不是 to_s:

class Foo
def to_str
"hello!"
end
end

String.try_convert(Foo.new) # => "hello!"

to_str 通常用于指示您的对象可以用来代替 String(与仅具有 String 表示形式不同)。

关于ruby try_convert 类方法不转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27669557/

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