Ruby:类定义中的self关键字

时间:2018-07-05 22:18:53

标签: ruby self

用@ name.split替换self.name.split是同一件事吗?

class Person
  attr_accessor :name

  def initialize(name)
    @name = name
  end

  def normalize_name
    self.name.split(" ").collect{|w| w.capitalize}.join(" ")
  end

end

1 个答案:

答案 0 :(得分:0)

是的,它具有相同的结果,因为您定义了一个attr_accessor,它提供了getter和setter方法

class Person
  def name
    @name
  end

  def name=(str)
    @name = str
  end
end

因此您可以使用name接收器调用函数self,但是如果您从类中摆脱了attr_accessor,则无法使用self.name来获取值的name

class Person  

  def initialize(name)
    @name = name
  end

  def normalize_name
    self.name.split(" ").collect{|w| w.capitalize}.join(" ")
  end

end

p = Person.new('John Doe')
p.normalize_name
NoMethodError: undefined method `name' for #<Person:0x00557e98300f68 @name="John Doe">