这是一个非常简单的问题,但我处于初级水平并且对于if modifier
的Ruby有点困惑,我在谷歌上搜索但不清楚它与其他编程语言如java等有什么不同。
任何人都可以通过简单的例子让我理解或者请参考有用的博客。
提前致谢。 :)
答案 0 :(得分:1)
if
正文时, Favor modifier unless
/ single-line
用法。喜欢:
number = 4
puts "number is even" if number.even?
# >> "number is even"
如果您有多行逻辑,请使用传统方式编写它:
number = 4
if number.even?
# some work with number then print it
puts "number is even"
end
# >> "number is even"
expr if expr
如果右侧表达式为真,执行左侧表达式。
答案 1 :(得分:0)
使用if修饰符有一个陷阱,这可能是错误的来源。 if修饰符的优先级非常低,并且绑定比分配运算符更松散。也就是说,赋值表达式将取代修饰符表达式。
如果x没有名为foo的方法,则什么也不会发生,并且y的值不会被修改。
y = x.foo if x.respond_to? :foo
在第二行中,if修饰符仅适用于方法调用。如果x没有foo方法,则修改后的表达式的值为nil,这是分配给y的值。
y = (x.foo if x.respond_to? :foo)
这确实可能使您的程序崩溃。同样,在第一个示例中不修改y。在第二个示例中,为y分配了值nil:
y = x.foo if x.respond_to? :foo
y = (x.foo if x.respond_to? :foo)