我了解try_convert
将尝试对对象使用隐式转换,如果隐式转换结果为nil
,则返回nil
,如果对象为nil
或如果不存在隐式转换方法。 try_convert
的用例是什么?它是否意味着测试输入并返回它,如果它是预期类型,否则nil
,同时避免获得TypeError
?为什么不在这种情况下使用is_a
?
答案 0 :(得分:3)
try_convert
很少使用。但用例是严格转换对象,而不是更松散地使用表示。例如,考虑:
/foo/.to_s #=> "(?-mix:foo)"
/foo/.to_str #=> NoMethodError: undefined method `to_str' for /foo/:Regexp
String.try_convert(/foo/) #=> nil
在类上没有定义to_str
方法,因为正则表达式不像字符串。
同样,Array.try_convert(object)
调用object.to_ary
(不 .to_a
),Hash.try_convert(object)
调用object.to_hash
(不< / strong> .to_h
)。
因此,例如,如果您希望定义一个真正行为类似1> String
的自定义类,那么建议定义一个to_str
方法 - 因此(除其他事项外,你可以在这个类的实例上调用String.try_convert
。