2017-06-05 4 views
1

Ich habe eine Frage darüber, was der beste Weg ist, eine Klassenvariable in Ruby zu referenzieren. HierRuby self.name oder @name

ist eine Klasse I gemacht:

class Person 
    attr_accessor :name 

    def initialize(name) 
    @name = name 
    end 

    def say_name 
    puts @name 
    end 

    def say_name2 
    puts self.name 
    end 

end 

bob = Person.new("Bob") 

bob.say_name 
=> "Bob" 

bob.say_name2 
=> "Bob" 

beiden "say_name" Methoden scheint wie beabsichtigt zu arbeiten. Warum verwenden Sie die @ Variable vs die Self.Variable ??

+0

Sie brauchen nicht einmal das 'self.' in Ihrer zweiten Methode, es sei denn, Sie zuweisen, es kann nur' name' sein ... –

+0

Sie haben keine Klassenvariable in Ihrem Code oben. – sawa

Antwort

1

attr_accessor :name schafft nur Methode name, die @name Variable gibt, so etwas wie

def name 
    @name 
end 

anstelle von Ihnen.

Ohne attr_accessor funktionieren sowohl self.name als auch name nicht und geben NoMethodError zurück. @name funktioniert in allen Fällen.