我刚刚发现,paren中的空格可能在Ruby中以意想不到的方式起作用: 以下是在语义上与我相同的3个函数:
results = []
n = len(Course_Specific_Vocabulary_Dict['Binary Vector'])
for a in Employee_Specific_Vocabulary_Dict['Binary Vector']:
# Get same size array w.r.t Course_Specific_Vocabulary_Dict["Binary Vector]
repeated_a = np.repeat([a], n, axis=0)
results.append(np.bitwise_xor(repeated_a, Course_Specific_Vocabulary_Dict['Binary Vector']))
但是,def foo(x)
return {
:a => (x - 100),
}
end
def bar(x)
return {
:a => (x
- 100),
}
end
def zot(x)
return {
:a => (x -
100),
}
end
和foo(10)
返回zot(10)
(正如我预期的那样),而{:a=>-90}
返回bar(10)
(令我沮丧和失望)。
我在这里想念什么?
答案 0 :(得分:8)
这是一个不寻常的情况,但是我相信您看到的是Ruby将其解释为几个连续语句,而不是单个语句。如图所示:
x # Statement 1
-100 # Statement 2
该代码块的结果为-100
。
对于zot
,您已经表示了要通过悬挂-
二进制运算符来继续下一行:
x - # Statement 1
100 # Statement 1 (cont)
值得注意的是,在进行方法调用时您不能这样做:
zot(x
-100 # Syntax error
)
在那种情况下,参数语法规则要严格得多。在自由格式的(...)
结构中,您具有更大的自由度。
答案 1 :(得分:5)
在Ruby中,有两种可能的表达式分隔符:分号;
和换行符。
所以
a
b
与
相同a; b
这意味着
a
- b
与
相同a; - b
与
相同a; b.-@()
当然,您希望它等同于
a - b
与
相同a.-(b)
要点是:这两种解释中的每一种都是同等有效的。语言设计者必须选择这两种解释中的一种,在这种情况下,他们选择第一种。两者都不是“正确”或“正确”的。
如果他们选择了第二种解释,那么您就不会问这个问题,但是会有其他人问相反的问题。