ruby - 为什么需要 'self' 才能从其构造函数中调用 Ruby 方法?

标签 ruby

<分区>

如果我有这样的类(class):

class Person

  def initialize(options={})
    self.name = options[:name]
  end

  def name=(name)
    @name = name
  end

end

...然后“name=”方法被调用,我得到了我期望的结果。但是,如果我稍微更改示例以从对“name=”的调用中删除“self”,则永远不会调用该方法:

class Person

  def initialize(options={})
    name = options[:name]
  end

  def name=(name)
    @name = name
  end

end

这是为什么?为什么“ self ”必须在那里?我的印象是隐含的“self”会在“initialize”构造函数中按预期设置,因此会像第一个示例一样运行。

最佳答案

Ruby 不知道你是想创建一个名为“name”的局部变量还是使用成员变量。

self.name 告诉它你想使用成员变量。

没有任何语法表明您想要创建一个局部变量,所以这必须是默认的。

(另外,成员变量不是真实的,但你知道我的意思)

关于ruby - 为什么需要 'self' 才能从其构造函数中调用 Ruby 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17376825/

相关文章:

ruby - Rails 迁移,引用 `unique: true` 未在架构中生成 `unique: true`,导致 constancy_fail 检查失败

ruby - 如何使用hadoop流和ruby映射器/缩减器设置分布式映射减少作业?

ruby-on-rails - 在模型的属性名称中包含 "ID"

ruby-on-rails - .order ("RANDOM()") 与 will_paginate gem

ruby-on-rails - 找不到符号 : _SSLv2_client_method (LoadError)

ruby-on-rails - 如何使用 Rails Form 和 Role Model Gem 添加多个角色

ruby - 编写 openssl 脚本以生成许多证书而无需手动输入密码?

ruby - hash 已经做成字符串的怎么转成hash?

Ruby 无法从 Azure 实例元数据服务获取 Azure VM 元数据

ruby-on-rails - rails 4 - stripe_event 函数