如何在 ruby​​ 中编写一个采用散列样式、方括号参数的方法,如 mymethod[arg]?

Max*_*ams 3 ruby methods syntax

我想用 ruby​​ 编写一个方法来替换当前仅返回哈希值的方法。

所以目前我们有这个

def some_stats
  {
    :foo => "bar",
    :zoo => "zar"
  }
end
Run Code Online (Sandbox Code Playgroud)

可以这样调用:

some_stats[:foo]
Run Code Online (Sandbox Code Playgroud)

我想用一个用 :foo 调用的方法来替换它,它会做一些更复杂的事情,只是构建一个哈希。但是,我希望以相同的方式调用它,并使用方括号表示法。例如

#this is a bit pseudo-cody but hopefully you get the idea.
def some_stats[](key)
  if key.to_s =~ /something/
    #do something
    return something
  else
    #do something else
    return something_else
  end
end
Run Code Online (Sandbox Code Playgroud)

这仍然会被称为some_stats[:foo]

我无法计算出定义方法名称的语法:上面的方法def some_stats[](key)不起作用。我觉得这应该是可能的。

Bro*_*tse 5

你已经很接近了。object[sth]只是 的语法糖object.[](sth)。因此,要做你需要的事情,你必须定义some_stats返回定义方法的对象的方法[]

class Stats
  def [](key)
    if key.to_s =~ /something/
     #do something
     return something
  else
    #do something else
    return something_else
  end
end

def some_stats
  Stats.new
end

some_stats[:something_new] #=> something
some_stats[:not_new] #=> something_else
Run Code Online (Sandbox Code Playgroud)