【问题标题】:What the does the line if a = b mean in ruby code? [duplicate]ruby 代码中 if a = b 的行是什么意思? [复制]
【发布时间】:2017-01-10 18:28:31
【问题描述】:

我正在尝试理解以下代码中的特定行:

def roman_to_integer(roman_string)
   prev = nil
   roman_string.to_s.upcase.split(//).reverse.inject(0) do
    |running_sum, digit|
     if digit_value = DIGITS[digit]
       if prev && prev > digit_value
         running_sum -= digit_value
       else
         running_sum += digit_value
       end
       prev = digit_value
     end
     running_sum
   end
 end

如果 digit_value = DIGITS[digit] 表示这行,有人可以帮我理解吗?我们是否将哈希中的键“DIGIT”对应的值分配给这里的digit_value?

【问题讨论】:

    标签: ruby if-statement variable-assignment


    【解决方案1】:

    我们是否将哈希中的键“DIGIT”对应的值分配给这里的digit_value?

    是的,这正是正在发生的事情。临时变量比从哈希中提取更容易阅读。在类似的情况下,获取值可能会更昂贵(例如,考虑读取数据库而不是哈希查找),因此进入该实践并不是一个坏习惯。

    赋值运算符还返回为 if 语句分配的值。

    替代的等效语法有点冗长:

    digit_value = DIGITS[digit]
    if digit_value
      # .... etc
    

    因此,当为变量赋值并希望立即检查其真实性时,这也是一种常见的样式选择。

    【讨论】:

      【解决方案2】:

      if digit_value = DIGITS[digit] 将返回 true if DIGITS[digit] 的值不是 nilfalse。这是因为在 Ruby 中 nil 和 false 是唯一被认为是虚假的值。

      Ruby 将首先将值分配给变量,然后评估该值是否为假。

      【讨论】:

        【解决方案3】:

        我们是在赋值吗

        是的,我们是。我们还检查操作的真实性。赋值运算符返回被赋值的值。现在,如果它是一个数字,它将是一个真实的结果,控制将进入if

        如果DIGITS[digit]返回nil或false,则赋值给digit_value,也将成为赋值操作的结果。这些值是错误的,所以我们将输入else,如果我们有一个。但我们没有,所以我们只是跳过if

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-03-26
          • 2011-08-24
          • 2014-12-21
          • 2017-02-02
          • 2013-12-16
          • 1970-01-01
          • 1970-01-01
          • 2014-01-16
          相关资源
          最近更新 更多