कि झलकी को परिभाषित करता है एक Virtual Attribute (या एक "सेटर" विधि) ताकि "express_token" एक विशेषता की तरह दिखता हो, भले ही यह विधि का नाम हो। उदाहरण के लिए:
वस्तु "f" कोई विशेषता या उदाहरण चर "foo" (और न ही यह एक जरूरत है) का नाम दिया है, इसलिए है
class Foo
def foo=(x)
puts "OK: x=#{x}"
end
end
f = Foo.new
f.foo = 123 # => 123
# OK: x=123
ध्यान दें कि "foo =" विधि बस वाक्यात्मक चीनी एक विधि अनुमति देने के लिए है कॉल जो एक असाइनमेंट की तरह दिखता है। ध्यान दें कि इस तरह के सेटर विधियों हमेशा किसी भी return
कथन या अंतिम मान के बावजूद, उनके तर्क को वापस कर दें।
यदि आप शीर्ष-स्तरीय सेटर विधि को परिभाषित कर रहे हैं, उदाहरण के लिए, "irb" में, तो व्यवहार ऑब्जेक्ट क्लास के तरीकों के अंतर्निहित जोड़ के कारण थोड़ा उलझन में हो सकता है। उदाहरण के लिए:
class NewDog
def initialize(breed)
@breed = breed
end
# create reader only
attr_reader :breed, :name
# setter method
def set_name(nm)
@name = nm
end
end
nd = NewDog.new('Doberman')
nd.set_name('Benzy')
puts nd.name
आप इस के लिए सेटर विधि refactor हैं:
def bar=(y)
puts "OK: y=#{y}"
end
bar = 123 # => 123, sets the variable "bar".
bar # => 123
Object.new.bar = 123 # => 123, calls our method
# OK: y=123
Object.public_methods.grep /bar/ # => ["bar="]
आप इस तरह सेटर तरीकों परिभाषित करने के बारे रूबी की आधिकारिक दस्तावेज का उल्लेख कर सकते? – gardenofwine
@gardenofwine: हम्म, अच्छा सवाल, मुझे यकीन नहीं है कि यह विशेष रूप से कहीं भी दस्तावेज किया गया है ... – maerics
इस तथ्य पर +1 कि सेटर विधियां आखिरी कथन, या स्पष्ट वापसी मानों के INSTEAD को अपने तर्क वापस निष्पादित करती हैं। मैंने बस इस idiosyncrasy पर 20 मिनट बर्बाद कर दिया, और इस SO जवाब ने इसे दबाया। –