【发布时间】:2017-11-07 16:29:33
【问题描述】:
我了解try_convert 将尝试对对象使用隐式转换,如果隐式转换结果为nil、对象为nil 或不存在隐式转换方法,则返回nil。 try_convert 的用例是什么?它是否意味着测试输入并在它是预期类型时返回它,否则返回nil,同时避免获得TypeError?在这种情况下为什么不使用is_a?
【问题讨论】:
标签: ruby
我了解try_convert 将尝试对对象使用隐式转换,如果隐式转换结果为nil、对象为nil 或不存在隐式转换方法,则返回nil。 try_convert 的用例是什么?它是否意味着测试输入并在它是预期类型时返回它,否则返回nil,同时避免获得TypeError?在这种情况下为什么不使用is_a?
【问题讨论】:
标签: ruby
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(not .to_a),Hash.try_convert(object) 调用 object.to_hash(not .to_h)。 p>
因此,例如,如果您希望定义一个真正行为类似于 String 的自定义类,那么建议定义一个 to_str 方法 - 因此(除其他外)你可以在这个类的实例上调用String.try_convert。
【讨论】: