ruby - 为什么在给自己分配某些东西时我没有收到错误

标签 ruby

基于 this blog tap 的工作方式与我同意的类似。

class Object
  def tap
    yield self
    self
  end
end

这是我的实验

class Lab
end

puts Lab.new.tap {|e| e = 'Boom' }

在上面的例子中,因为我试图改变 self 的值,所以 ruby​​ 应该会崩溃。但它不会爆炸。

下面是一个试图改变 self 的尝试失败的案例。所以我的问题是为什么在上述情况下 ruby​​ 没有爆炸。

class Lab
  def lab
    puts self
    self = 'Boom' #=> exception Can't change the value of self
    puts self
  end
end

最佳答案

原因与此代码段中未分配self的原因相同:

hello = self
hello = 'foo'

e 只是一个变量,给它赋值只是给它赋值,它不会影响 e 的当前值

关于ruby - 为什么在给自己分配某些东西时我没有收到错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4390347/

相关文章:

ruby-on-rails - rails : link_to - passing a subdomain

mysql - 在 Rails 中迭代多个数据库的安全方法

ruby-on-rails - 找不到带下划线的路线或没有正确对待它

jquery - 使用 Sinatra 和 jQuery 而无需在 POST 上重定向

java - saml 集成 Ruby(IDP) 和 Java(SP)

Ruby:字符串比较问题

ruby-on-rails - 如何检测用于 Rails 应用程序的服务器(thin、puma、passenger 等)?

ruby - #!/usr/bin/env ruby​​ 在 cron 中找不到

ruby-on-rails - 为什么人们把像 `gem "守卫 "` in their ` :development` group in Gemfiles 这样的东西

ruby-on-rails - Ruby 遍历一个变量,除非它是 nil