【发布时间】:2015-05-02 17:42:39
【问题描述】:
这是一个非常简单的问题,但我处于初级阶段,对 Ruby 的if modifier 有点困惑,我在 Google 上搜索但尚不清楚它与其他编程语言(如 java 等)有何不同。
谁能通过简单的例子让我理解或参考有用的博客。
提前致谢。 :)
【问题讨论】:
标签: ruby if-statement syntax
这是一个非常简单的问题,但我处于初级阶段,对 Ruby 的if modifier 有点困惑,我在 Google 上搜索但尚不清楚它与其他编程语言(如 java 等)有何不同。
谁能通过简单的例子让我理解或参考有用的博客。
提前致谢。 :)
【问题讨论】:
标签: ruby if-statement syntax
Favor modifier if/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如果右侧表达式为真,则执行左侧表达式。
【讨论】:
使用 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)
【讨论】: