ruby 代码中 if a = b 的行是啥意思? [复制]

Posted

技术标签:

【中文标题】ruby 代码中 if a = b 的行是啥意思? [复制]【英文标题】: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?

【问题讨论】:

【参考方案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

【讨论】:

以上是关于ruby 代码中 if a = b 的行是啥意思? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

awk中 NR 和 NF到底是啥意思? 能举例说明吗?

在 Ruby 中按值传递是啥意思? [复制]

BAT命令行是啥??

C语言中if(a<>b)是啥意思

UNIX shell 脚本中的“#!/bin/sh”行是啥意思?

matlab中reshape是啥意思