【问题标题】:Ruby blocks - unless and if comparisonRuby 块 - 除非和如果比较
【发布时间】:2013-12-20 09:48:54
【问题描述】:

我对红宝石语言中的除非和如果块有疑问。如果我这么笨,请原谅我问这个问题。

假设我们有两个布尔变量 a = trueb = true

条件:我想检查它们是否都为真。使用 if 语句,我们可以检查如下。

if a == true && b == true
  print "Hai"
end

疑问:我可以用下面的语句代替上面的语句吗?

unless a == false && b == false
  print "Hai"
end

上面给出的两个块会给出相同的结果吗?

【问题讨论】:

  • 如果块不是循环,则调用它们
  • 您可以自己尝试 4 种可能的组合。
  • 嘿,可能是因为你的老师很棒!但是,即使你是天才,也请不要嘲笑别人。谢谢:)-
  • @sawa 在印度我们也知道这一点。可能他不知道如何在编程中应用它:)

标签: ruby block


【解决方案1】:

而不是

if a == true && b == true
  print "Hai"
end

你可以写

if a && b
  print "Hai"
end

这是一样的

unless !(a && b)
  print "Hai"
end

与(使用De Morgan's laws)相同

unless !a || !b
  print "Hai"
end

【讨论】:

    【解决方案2】:

    不,它来自De Morgan's laws

    首先,如果你检查布尔值,你不需要这个奇怪的构造a == true,它就足够了

    if a && b
    

    其次,!(a && b) == !a || !b(这部分来自德摩根定律),所以如果你想用除非你想让它等同于前面的if表达式,你应该这样使用它:

    unless !a || !b
    

    既然很乱,你应该留在if a && b

    【讨论】:

      【解决方案3】:

      if 不是循环 if 是检查条件运算符:

      if a == true && b == true
        print "Hai"
      end
      

      确保您区分 === 运算符,因为 = 是赋值运算符,== 是条件运算符,它返回 truefalse 的结果是 ruby​​ 类。让它成为一个循环:

      while true
        if a == true && b == true
          print "Hai"
        else
          break
        end
      end
      

      可以简化为:

      while a && b
        print "Hai"
      end
      

      unless运算符也是检查条件关键字if,可以表示为if !if not。您可以使用DeMorgan's ruleif 运算符的条件转换为unless 运算符的否定条件。在你的情况下,它的外壳是:

      unless a == false || b == false # not &&
        print "Hai"
      end
      

      或者如果你做一个循环:

      while true
        unless a == false || b == false
          print "Hai"
        else
          break
        end
      end
      

      并以简化形式:

      while !( a == false || b == false )
        print "Hai"
      end
      

      【讨论】:

        【解决方案4】:

        如果 a == true 且 b == false 则 a == false and b == false 为 false。

        因此,unless a == false and b == false 为真

        但是 b == 假

        所以不,不一样:)

        【讨论】:

          【解决方案5】:

          我想测试代码。 ruby 中最好的事情是启动irb 的实例。

          交互式 ruby​​ bash 可用于测试这些假设。

          接下来是a_boolean == true的用法。这在 ruby​​ 中不被认为是好的风格。只需写a_boolean!a_boolean

          另一件事是“循环”与“条件”是不同的。

          循环 -> while、until 等

          条件 -> 如果、除非等

          简短回答您的问题。 unlessif相反,是!if

          【讨论】:

            【解决方案6】:

            这不是一个循环,它是一个 if 语句或块

            if a and b
               print 'hi'
            end
            

            如果您不比较位,请不要使用 &&。改用“和”。 还有 if a 的意思和 if a == true 一样

            unless a and b # unless ( a and b ) is the same
               print 'hi'
            end
            

            把意思写下来

            如果不是(a 和 b)那么

            希望这会有所帮助。

            【讨论】:

              猜你喜欢
              • 2016-01-05
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-01-12
              • 2012-05-04
              相关资源
              最近更新 更多