ruby-on-rails - 向 Symbol 添加 to_str 方法有什么负面影响?

标签 ruby-on-rails ruby symbols

我在一个 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/

相关文章:

ruby-on-rails - 如何解析位于 Amazon S3 存储桶中的 CSV 文件

ruby-on-rails - 在 Ruby 或 Rails 中,hash.merge({ :order => 'asc' }) can return a new hash with a new key. 什么可以返回带有已删除键的新散列?

ruby-on-rails - rbenv 不能在 ubuntu 上使用 rbenv 和 ruby​​-build 工作吗?

ruby-on-rails - Rails 3. 为什么我的十进制值行是诸如#<BigDecimal :5003750 ,'0.1E2' , 9(18)>> 之类的值?

visual-studio-2010 - 指定要从 VS2010 调试 session 中排除的多个符号

ruby - 为什么没有更多的项目使用 Ruby Symbols 而不是 Strings?

ios - 存在符号定义时出现 "Undefined symbols for architecture"clang 错误(使用静态库)

ruby-on-rails - rails 服务器抛出 `require' : cannot load such file -- bigdecimal/util (LoadError)

ruby-on-rails - Ruby on Rails - 事件记录 - 关系 - 多对多

ruby-on-rails - 如何使用 Nokogiri 提取子文本?