Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.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 运算符优先级如何适用于条件块?_Ruby - Fatal编程技术网

Ruby 运算符优先级如何适用于条件块?

Ruby 运算符优先级如何适用于条件块?,ruby,Ruby,为什么如果我调用一个没有块的条件方法,我可以执行if-foo?bar.baz,但对于块,我必须执行以下操作: if foo?; bar.each { |n| n.baz } end 对于多行块,我该怎么做呢 bar.each do |n| n.quack end 您提供的第一个版本将从bar.each执行结果传递给foo?那么它期待着福?进行辩论 第二个版本将执行bar。每个仅当foo?为真时 我建议您使用以下样式: if foo? bar.each do |n| n.q

为什么如果我调用一个没有块的条件方法,我可以执行
if-foo?bar.baz
,但对于块,我必须执行以下操作:

if foo?; bar.each { |n| n.baz } end
对于多行块,我该怎么做呢

bar.each do |n|
  n.quack
end

您提供的第一个版本将从bar.each执行结果传递给foo?那么它期待着福?进行辩论

第二个版本将执行
bar。每个
仅当
foo?
为真时

我建议您使用以下样式:

if foo?
   bar.each do |n|
     n.quack
   end 
end
这也回答了你的最后一个问题

注意:如果您实际希望将一个参数传递给
foo?
,这是执行块的结果,那么最好使用一个helper变量:

cond = bar.each do |n|
  n.quack
end 

if foo? cond
   .. do stuff
end

您可以使用和这些结构,但是上面提到的内容是不可读的。你必须避免写不可读的代码

if true then [1, 2].map { |n| n * 2 } end
=> [2, 4] 

[1, 2].map do |n|
  n * 2
end if true
=> [2, 4] 

[1, 2].map do |n|
  n * 2
end if false
=> nil 

所有这些“如果”都很难读懂。将
条的结果提取到一个变量中,然后-bam!-问题消除了。而且,
#每个
都不符合您可能认为的功能。每个
的结果都是返回
,因此不需要
cond
,如果是foo?条形码是等效的-只要块对条形码没有副作用(无论如何这是个坏主意)@lain我说你最好
不要
你应该当然,你可以决定不使用变量,但这无助于你的设计,也无助于所有的可读性添加实际上没有任何作用的变量是不好的做法,因为这意味着
每个
在实践中等同于
map
这样的函数。