gpt4 book ai didi

ruby - 如何使用 Ruby 创建类似 ".find_by_something_and_something_else"的方法?

转载 作者:数据小太阳 更新时间:2023-10-29 08:14:41 24 4
gpt4 key购买 nike

使用 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 没有任何参数只是传递原始参数,不需要显式传递它们
  • 由尾随 ifunless 表达式保护的早期 return 大大清除了控制流
  • 所有 each 迭代器所做的,就是根据谓词选择项目;但是,已经有一个用于选择项目的迭代器:select

关于ruby - 如何使用 Ruby 创建类似 ".find_by_something_and_something_else"的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1868269/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com