簡體   English   中英

Ruby中parens中的空白有多重要?

[英]How important is whitespace inside parens in Ruby?

我剛剛發現,parens中的空白可能會以一種意想不到的方式在Ruby中發揮作用:這里有3個函數在語義上與我相同:

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)返回{:a=>-100} (讓我感到沮喪和失望)。

我在這里錯過了什么?

這是一個不尋常的案例,但我相信你所看到的是Ruby解釋那幾個連續的陳述而不是一個陳述。 正如它所看到的那樣:

x    # Statement 1
-100 # Statement 2

該代碼塊的結果為-100

在的情況下, zot您曾表示你的意圖繼續對下一該行通過具有懸掛-二元運算符:

x - # Statement 1
100 # Statement 1 (cont)

值得注意的是,在進行方法調用時,您無法執行此操作:

zot(x
 -100  # Syntax error
)

在這種情況下,參數語法規則要嚴格得多。 在自由形式(...)結構內,你有更大的自由度。

在Ruby中,有兩種可能的表達式分隔符:分號; 和換行符。

所以,

a
b

是相同的

a; b

意思就是

a
- b

是相同的

a; - b

這是一樣的

a; b.-@()

當然,你期望它等同於

a - b

這是一樣的

a.-(b)

關鍵是:這兩種解釋中的每一種都同樣有效。 語言設計者必須選擇這兩種解釋中的一種,在這種情況下,他們選擇第一種解釋。 兩者都不是“正確”或更“正確”。

如果他們選擇了第二種解釋,那么你就不會問這個問題,但其他人會問對方的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM