如果Ruby的修饰符与其他语言不同

时间:2015-03-02 11:27:21

标签: ruby if-statement syntax

这是一个非常简单的问题,但我处于初级水平并且对于if modifier的Ruby有点困惑,我在谷歌上搜索但不清楚它与其他编程语言如java等有什么不同。

任何人都可以通过简单的例子让我理解或者请参考有用的博客。

提前致谢。 :)

2 个答案:

答案 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)