【问题标题】:If modifier of Ruby is different than other languages如果 Ruby 的修饰符与其他语言不同
【发布时间】:2015-05-02 17:42:39
【问题描述】:

这是一个非常简单的问题,但我处于初级阶段,对 Ruby 的if modifier 有点困惑,我在 Google 上搜索但尚不清楚它与其他编程语言(如 java 等)有何不同。

谁能通过简单的例子让我理解或参考有用的博客。

提前致谢。 :)

【问题讨论】:

    标签: ruby if-statement syntax


    【解决方案1】:

    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

    如果右侧表达式为真,则执行左侧表达式。

    【讨论】:

    • 谢谢,所以如果修饰符只是用于单行条件?
    【解决方案2】:

    使用 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-03
      • 2011-08-30
      • 2022-08-21
      • 1970-01-01
      • 2021-09-15
      • 1970-01-01
      • 2018-02-21
      相关资源
      最近更新 更多