[英]How does `[]=` work in Ruby?
我有一個像下面這樣的課程:
class MyClass
def [](key)
'[] stub'
end
def []=(key, value)
'[]= stub'
end
def foo
self[:foo] #=>'[] stub'
end
def bar
self[:bar]= 'bar'#=> '[]= stub'
end
end
有沒有沒有self
方法可以重寫MyClass#foo
和MyClass#bar
方法?
您可以使用send
:
def foo
send(:[], :foo)
end
def bar
send(:[]=, :bar, 'bar')
end
但是我將改為實現store
和fetch
並將[]
和[]=
定義為別名:
def fetch(key)
# ...
end
alias_method :[], :fetch
def store(key, value)
# ...
end
alias_method :[]=, :store
並從類中調用fetch
/ store
而不是[]
/ []=
:
def foo
fetch(:foo)
end
def bar
store(:bar, 'bar')
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.