簡體   English   中英

在Ruby中,如何將多個哈希傳遞給一個方法而沒有括號?

[英]In Ruby, how can you pass more than one hash to a method, without parentheses?

在Ruby中,如何將多個哈希傳遞給一個方法而沒有括號?

例如

def abc x,y
end

abc {4,5},{6,4} <- syntax error, unexpected ',', expecting '}'

Mu指出,如果您將非散列形式(即變量形式)傳遞給多個散列,則可以不帶括號而傳遞多個散列。

但是除此之外,對於文字哈希,

您可以這樣做(需要括號以傳遞多個文字哈希),除非您要傳遞關鍵字參數。.您可以傳遞多個不帶括號的關鍵字參數。

當方法的參數包含冒號(例如def blah x:, y:時,將使用關鍵字blah y:2,x:3來調用關鍵字參數。 有時,您必須查看參數以查看參數是否為關鍵字參數,例如,如果您有一個用abc x:3調用的方法,則可能是def abc x:在這種情況下,您用關鍵字對其進行了調用論點。 或者它可能是def abc x在這種情況下,您使用哈希將其調用,省略了{}。

當我說關鍵字參數時,我並不是說哈希。反之亦然,當我說哈希時,我的意思不是關鍵字參數。

當調用不帶括號時,您只能傳遞一個哈希,並且該哈希必須是最后一個參數。 並且您可以跳過其周圍的{}。

注意-我不是專家,但是關於一個關鍵詞參數是否是哈希類型的相關問題,據我所知,從編寫紅寶石3之前就可以理解,但是有人建議將紅寶石3用於具有不同於哈希https://bugs.ruby-lang.org/issues/14183的 “真實”關鍵字參數

關鍵字參數不能為多值。

同樣,哈希可以自動轉換為關鍵字參數。 (例如,如果使用參數定義的方法是關鍵字參數,則可以在{x:"a"}傳遞哈希,即x是符號,並且該哈希將轉換為關鍵字參數x:"a" (x是參數名稱)。

我將添加有關塊和括號的要點,因為用{}完成的塊看上去有點像哈希,盡管它不是哈希。 並且一個塊可以影響是否需要括號。

如果看到abc {} ,則該{}是一個塊,而不是哈希,並且塊不算作參數。 因此,該調用適用於def abc但不適用於def abc x ,因為那里會得到與傳遞的參數數量有關的錯誤。

即使在其他一些參數之后傳遞一個塊時,在該塊之前也不應該有逗號,並且如果用{}完成的塊后面有一些參數,則需要括號,但是如果用do .. end完成的塊后面有一些參數,則您不需要括號

建議除非有DSL(特定於域的語言),否則應在多個參數之間使用括號。 您是否在Ruby中放入括號?

暫無
暫無

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

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