Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby:调用方法列表,直到返回true为止_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails Ruby:调用方法列表,直到返回true为止

Ruby on rails Ruby:调用方法列表,直到返回true为止,ruby-on-rails,ruby,Ruby On Rails,Ruby,在ruby中有没有一种很好的方法来进行一系列方法调用,直到返回true 这是我的第一个想法,但我想可能有更好的方法: if method_one elsif method_two elsif method_three else puts "none worked" end 试试这个: [:m1, :m2, :m3, ...].find{ |m| send(m) } != nil || "none worked" 返回true如果其中一个方法返回true否则返回none worked有许多

在ruby中有没有一种很好的方法来进行一系列方法调用,直到返回true

这是我的第一个想法,但我想可能有更好的方法:

if method_one
elsif method_two
elsif method_three
else
  puts "none worked"
end
试试这个:

[:m1, :m2, :m3, ...].find{ |m| send(m) } != nil || "none worked"

返回
true
如果其中一个方法返回
true
否则返回
none worked

有许多选项。有趣的是:

method_one || method_two || method_three || Proc.new { puts "none worked" }.call

您可以使用可枚举的#any?还有

[ :m1, :m2, :m3 ].any?{ |method| object.send( method )} || "None Worked"

这种技术甚至不需要使用proc/lambda<代码>方法一| | |方法二| | |“不起作用”是的,这个过程只是一个很好的额外Ithink@Jimmy,使用您提供的代码,表达式将返回
false
true
“无工作”
,这与OP ask不同。您也不能使用
put
来预写所有内容,因为它也会打印布尔值。我认为“put”部分对逻辑没有意义,这只是他在示例中编写的方式。在这种逻辑的实际应用中,我会想象表达式的返回值将被分配给某个对象,而不是盲目地打印出来。@Jimmy,问题是找到一种更好的方法来完成同样的操作。因此在这种情况下,
put
非常重要。当然,这取决于上下文,puts可能并不重要。而且,从技术上讲,它运行所有方法,即使其中一个返回true。它可以很容易地修改为:
[:m1,:m2,:m3,…]查找{m | return if send(m)}
或类似的内容。我测试了代码,它工作正常。只要方法在成功时返回non-nilvalue/true,在失败时返回nil/false,代码就应该工作。这是我认为最优雅、最准确的方法(有吗?)
[ :m1, :m2, :m3 ].any?{ |method| object.send( method )} || "None Worked"