簡體   English   中英

Ruby中的[[] =`是如何工作的?

[英]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#fooMyClass#bar方法?

您可以使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM