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]
的值不是 nil
或 false
。这是因为在 Ruby 中 nil 和 false 是唯一被认为是虚假的值。
Ruby 将首先将值分配给变量,然后评估该值是否为假。
【讨论】:
【参考方案3】:我们是在赋值吗
是的,我们是。我们还检查操作的真实性。赋值运算符返回被赋值的值。现在,如果它是一个数字,它将是一个真实的结果,控制将进入if
。
如果DIGITS[digit]
返回nil或false,则赋值给digit_value
,也将成为赋值操作的结果。这些值是错误的,所以我们将输入else
,如果我们有一个。但我们没有,所以我们只是跳过if
。
【讨论】:
以上是关于ruby 代码中 if a = b 的行是啥意思? [复制]的主要内容,如果未能解决你的问题,请参考以下文章