使用 Ruby 我知道您可以非常有创意地命名您的方法。例如在 rails 中你有 .find_by_this_and_that
。
我该怎么做?
示例:
def get_persons_with_5_things
res = []
persons.each do |person|
if person.number_of_things == %MAGICALLY GET THE NUMBER 5 FROM FUNCTION NAME%
res << person
end
end
return res
end
我什至不确定你是如何称呼这种东西的,所以任何指点都将不胜感激。
最佳答案
我对你的例子有点困惑。如果您在方法名称中使用硬编码 5 定义方法,则无需在方法主体内神奇地找出它。如果你想在缺少方法的情况下做一些动态的事情,那就是这样的:
def method_missing(name, *args)
if name.to_s =~ /get_persons_with_(\d+)_things/
number_of_things = $1.to_i
res = []
persons.each do |person|
if person.number_of_things == number_of_things
res << person
end
end
return res
else
return super(name, *args)
end
end
[编辑(Jörg W Mittag)]:这是实现相同方法的更像 Rubyish 的方式:
def method_missing(name, *args)
return super unless name.to_s =~ /get_persons_with_(\d+)_things/
number_of_things = $1.to_i
return persons.select {|person| person.number_of_things == number_of_things }
end
super
没有任何参数只是传递原始参数,不需要显式传递它们- 由尾随
if
或unless
表达式保护的早期return
大大清除了控制流 - 所有
each
迭代器所做的,就是根据谓词选择项目;但是,已经有一个用于选择项目的迭代器:select
关于ruby - 如何使用 Ruby 创建类似 ".find_by_something_and_something_else"的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1868269/