【发布时间】:2015-03-19 02:34:06
【问题描述】:
我知道整行都被解析了,变量的值是在puts解析之前设置的:
def get_value
42
end
if value = get_value
puts value
end
# => 42
我得到以下结果,这是我所期望的:
#p = "Im totally a string" # <--Commented.
puts "Am i a string? #{p}" if p = "Im a confused string"
# => "Am i a string? "
然而,这很奇怪。在单行之前声明 p 会以一种意想不到的方式改变输出:
p = "foo" # <--Un-commented.
puts "Am i a string? #{p}" if p = "Im a confused string"
# => "Am i a string? Im a confused string"
p 是FixNum,而不是String:
p = 1
puts "Am i a string? #{p}" if p = "Im a confused string"
# => "Am i a string? Im a confused string"
发生了什么事?如果一开始并不明显,那么第二个代码块说明了"Im a confused string" 是如何被插值失败的。但是,在第三个示例中,简单地声明 p(与类型无关)会导致 "Im a confused string" 被插值
我认为这个问题与这些问题不同但相似:
【问题讨论】:
-
在使用
p =而不是p ==时,您将分配 到p而不是检查相等性,这会将分配的值返回给if,并且该值对于字符串(或false, nil以外的任何内容)始终为真。 -
我刚开始打字。 LOL 是的,Ruby 允许您使用方法的成功作为条件。在这种情况下,方法是
=。 -
你总是可以在一个变量上调用 .class 来检查它是什么类。 @MichaelBerkowski 称它为...您使用的是 = 而不是 ==
-
你的问题是什么?
-
好吧——无论是谁编辑了这个问题,都完全改变了我所问的内容,让我看起来像个白痴。很抱歉不清楚:我了解 = 与 == 的用法。编辑帖子的人在我提供的第二个代码块中取消注释
#p="Im totally a string"。问题在于,当预先声明p时,相同行puts "Am i a string? #{p}" if p = "Im a confused string"的结果会发生变化。简明扼要:完全声明变量p(FixNum/String 等)会更改puts "Am i a string? #{p}" if p = "Im a confused string"的输出