我有一个如下课程:
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
有没有办法在没有MyClass#foo
的情况下重写MyClass#bar
和self
方法?
答案 0 :(得分:2)
您可以使用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