在IF块中,我需要检查某个条件是否为真,如果是,就退出该块。
#something like this
if 1 == 1
return if some_object && some_object.property
puts 'hello'
end
我该如何做到这一点?
在IF块中,我需要检查某个条件是否为真,如果是,就退出该块。
#something like this
if 1 == 1
return if some_object && some_object.property
puts 'hello'
end
我该如何做到这一点?
你不能像那样跳出一个 if
。你可以在其中添加一个子句:
if (cond1)
unless (cond2)
# ...
end
end
如果您的逻辑太嵌套,需要更好地将其展开,请尝试预先计算变量,只有在需要时才进行深入处理:
will_do_stuff = cond1
will_do_stuff &&= !(some_object && some_object.property)
if (will_do_stuff)
# ...
end
避免深度嵌套结构的方法有很多,而且不必使用 break
语句。
在选择与事物相关联的词语时要小心。因为Ruby有块,所以我不确定您是否认为条件语句是一个块。例如,您不能执行以下操作:
# will NOT work:
block = Proc.new { puts "Hello, world." }
if true then block
如果你需要嵌套条件语句,你可以轻松实现,而不会让事情变得复杂:
if condition_one?
if condition_two?
# do some stuff
end
else
# do something else
end
if true then block.call end
,那么它就可以工作了。 - DaveMongooseblock
)?我认为语法要求它必须是 &block
,如果你要将其用作显式块的替代。 - DaveMongoose不必使用if
,你可以使用一个实际上从不循环的while
循环,并在适当的位置放置中断。
while some·condition
something·likely
break unless some·additional·condition
something·less·likely
break
end
def will_parse? (obj); !obj.nil?&& obj.respond_to? (:parse) && obj.is_ready_and_willing?; end
- coreyward&&=
是||=
的按位与等效形式,因此a &&= b
等同于a && a = b
。因此,如果a
为真值,那么将b
的值赋给a
。 - coreywardshould_do_x?
这样的辅助方法而不是一堆复杂的逻辑是一个很好的方法,但在这种情况下,有多少逻辑并不清楚。 - tadman