Ruby: ключевое слово self в определении класса - PullRequest
0 голосов
/ 06 июля 2018

Заменяет ли self.name.split на @ 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 голосов
/ 06 июля 2018

Да, это имеет тот же результат, потому что вы определили attr_accessor, который дает вам методы получения и установки

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">
...