我想用 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/