. Örneğin: Greet fonksiyonu name
olarak
class User
def name
@name
end
def name= name
@name = name
end
end
def greet user
name = user.name || 'John'
p "Hi, my name is #{name}"
end
user = User.new
greet user
=> 'Hi, my name is John'
name
=> NameError: undefined local variable or method 'name' for main:Object
user.name = "Mike"
greet user
=> 'Hi, my name is Mike'
@name
=> nil
sadece bu işlev içinde tanımlanan bir yerel bir değişkendir. İsim değişkeni, fonksiyonun ilk satırında
name = user.name || 'John'
olarak ayarlanmıştır, ancak fonksiyonun dışında değeri kalıcı değildir.
name
numaralı telefonu aramayı denediğinizde,
NameError
numarasını alırsınız, çünkü isim sadece karşılama işlevi içinde yerel bir değişken olarak tanımlanmıştır.
@name
, User sınıfının kullanıcı örneğine yereldir. Bu bağlamın dışında çağırmayı denediğinizde nil
elde edersiniz. Bu, yerel ve örnek değişkenler arasındaki bir farktır, örnek değişkenler, tanımlanmamışlarsa sıfırlanır, oysa yerel örnek olmayan değişkenler bir Hata oluşturur.
Her iki değişken türünün de belirli bir içeriğe yerel olduğuna dikkat edin. @name
, kullanıcı örneğinde tanımlanmıştır, böylece user.name
'u aradığınızda, kullanıcı örneğinde @name
'un tanımlandığı ad işlevini çağırırsınız. name
sadece selamlama fonksiyonunda tanımlıdır, bu yüzden p "Hi, my name is #{name}"
'u aradığınızda name
için bir değer elde edebilirsiniz, çünkü tanımlandığı kapsamdasınız.
Bir sınıf değişkeni, @@ hesaplarıdır. '@ account' bir örnek değişkendir. –
Verdiğiniz ilk örnek, bir sınıf değişkeni değil, bir örnek değişkendir. İkincisi yerel bir değişkendir. Özellikle kontrolörlere, modellere ya da genel olarak sadece Ruby sınıflarına mı atıf yapıyorsunuz? –
@LBg, @Pan Thomakos - Üzgünüm, benim hatamdı. Değişken madde konusunda uzman değilim. – user502052