`[] =`如何在Ruby中工作?

时间:2016-02-27 18:50:40

标签: ruby methods

我有一个如下课程:

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#barself方法?

1 个答案:

答案 0 :(得分:2)

您可以使用send

def foo
  send(:[], :foo)
end

def bar
  send(:[]=, :bar, 'bar')
end

但我会实现storefetch,并将[][]=定义为别名:

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