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

标签 ruby methods syntax

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

所以目前我们有这个

def some_stats
  {
    :foo => "bar",
    :zoo => "zar"
  }
end

可以这样调用:

some_stats[:foo]

我想用一个用 :foo 调用的方法替换它,它会做一些更复杂的事情,而不仅仅是构建一个散列。但是,我希望以相同的方式调用它,使用方括号表示法。 EG

#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

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

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

最佳答案

你很接近。 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

关于ruby - 如何在 ruby​​ 中编写一个采用散列样式、方括号参数的方法,例如 mymethod[arg]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68000203/

相关文章:

haskell - 在输入 `='上解析错误?

vb.net - VB.NET 可空语法的历史

ruby-on-rails - Rails 异常不适用于 find_by 查询

ruby-on-rails - 获取类上定义的直接实例方法

java - 使用 KeyListener 更改颜色

JavaScript - 如何列出对象的属性?

ruby-on-rails - 是否有 "blessed"Heroku 方法来设置 SSLProxy?

ruby - 访问 ruby​​ 中嵌套哈希的元素

java - 返回带有 try/catch block 的方法

javascript - 'javascript:' 前缀何时是有效语法?