ruby - 我试图理解 Ruby 中的 .freeze 概念。

标签 ruby

谁能解释为什么字符串会意外变异。我的导师就此进行了竞标,但我真的不明白为什么。

最佳答案

关于常量引用的对象如何发生变异的示例:

FOO = 'foo'
p FOO # => "foo"
FOO.upcase!
p FOO # => "FOO" (no errors)

BAR = 'bar'.freeze
p BAR # => "BAR"
BAR.upcase! # => freeze.rb:8:in `upcase!': can't modify frozen String (RuntimeError)

卡住常量引用的对象可以防止代码的意外行为,因此开发人员可以修复它或其他任何东西。

要查看 freeze 仅卡住对象,请查看如果将新值分配给常量,则抛出的错误是不同的:

BAZ = 'baz'.freeze # => warning: previous definition of BAZ was here
BAZ = 'bazbaz' # => warning: already initialized constant BAZ

受此主题启发:Why are there frozen constants everywhere?

关于ruby - 我试图理解 Ruby 中的 .freeze 概念。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52175606/

相关文章:

ruby-on-rails - 佣金 Assets 之间的差异 :precompile:all and rake assets:precompile:primary

ruby-on-rails - 如何检查对象是否为 nil?

ruby-on-rails - Rails 如何屈服于 erb 模板中的多个 block ?

ruby-on-rails - 无法重新索引 Sunspot SOLR - 错误 - RSolr::Error::Http - 500 内部服务器错误

ruby-on-rails - 无法加载此类文件 -- webrick/httputils

ruby - 使用正则表达式扫描字符串并返回精确值

ruby-on-rails - NameError:未初始化的常量 Order::AASM

javascript - 如何使用 gem 'intros-rails' 在 Rails 中创建导游

ruby - 我怎样才能让这个 Controller 方法不那么重?

ruby-on-rails - 程序 'rails' 可以在以下包中找到 - 某些应用程序和 RVM 有问题吗?