我在一个 ruby 应用程序中工作,在这个应用程序中,符号被用于不同的地方,而在这些地方人们通常会使用其他语言的字符串或枚举(主要用于指定配置)。
所以我的问题是,为什么我不向符号添加 to_str 方法?
这似乎是明智的,因为它允许符号和字符串之间的隐式转换。所以我可以做这样的事情而不必担心调用 :symbol.to_s:
File.join(:something, "something_else") # => "something/something_else"
负数与正数相同,它隐式地将符号转换为字符串,如果它导致一个模糊的错误,这可能会非常困惑,但考虑到符号的通常使用方式,我不确定这是否是一个有效的问题.
有什么想法吗?
最佳答案
当一个对象做 respond_to 时? :to_str
,你希望他真的像一个 String
。这意味着它应该实现 所有 String
的方法,因此您可能会破坏依赖于此的一些代码。
to_s
意味着您获得对象的字符串表示,这就是为什么这么多对象实现它的原因 - 但您获得的字符串远非“语义”等效到您的对象( an_hash.to_s 远非 Hash
)。 :symbol.to_str
的缺失反射(reflect)了这一点:符号不是也不能与 Ruby 中的字符串混淆,因为它们的用途完全不同。
您不会考虑将 to_str
添加到 Int 中,对吧?然而 Int 与 symbol 有很多共同点:它们中的每一个都是独一无二的。当您拥有一个符号时,您希望它也是唯一且不可变的。
关于ruby-on-rails - 向 Symbol 添加 to_str 方法有什么负面影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8058613/