2016-10-11 67 views
1

我想使用多個賦值,但我不關心輸入中的某些部分值。那麼有沒有辦法將一些東西分配給void變量(bash中的/dev/null)?類似nil = 'I wont be used'。我有一個更具體的例子來說明我想要達到的目標。如何使用ruby的多重賦值將值賦給void變量?

我輸入的是:

['no','foo','nop','not at all','bar'] 

而且我給你這樣說:

i,foo,dont,care,bar = ['no','foo','nop','not at all','bar'] 
#or with a splat : 
dont,foo,*care,bar = ['no','foo','nop','not at all','bar'] 

我想什麼做的是這樣的:

nil,foo,*nil,bar = ['no','foo','nop','not at all','bar'] 
+0

一種常見方法是隻使用'_'作爲佔位符變量。 – halfelf

回答

3
_, foo, *_, bar = ['no','foo','nop','not at all','bar'] 
foo #=> "foo" 
bar #=> "bar" 
_ #=> ["nop", "not at all"] 

您也可以用*_替換隻是*

是的,_是一個完全有效的局部變量。

當然,您不必使用_作爲您不會使用的值。例如,你可以寫

cat, foo, *dog, bar = ['no','foo','nop','not at all','bar'] 

使用_可減少錯誤的機會,但主要是告訴你不打算使用該值的讀者。有些人喜歡使用可變名稱以下劃線開始對值將不被使用:

_key, value = [1, 2] 

如果分配較少的變量存在的陣列的元件,在陣列端部的元件將被丟棄。例如,

a, b = [1, 2, 3] 
a #=> 1 
b #=> 2 
+0

我的建議是玩弄不同的表情來看看你得到了什麼。基本規則是,如果可以斷定只有一個賦值給變量,那就沒關係。 '* a,b,* c = [1,2,3,4,5]'是一個賦值不明確的例子,導致Ruby引發一個異常。 –

+0

我的linter刪除了_unused variable_標誌,如果我寫'_'或者即使我寫了'_some_random_name',是否有關於它的約定? –

+0

@UlysseBN,我沒有關注「linter」,但是,是的,有些人寫了'_unused_key'。我編輯了我的回答,提到這一點。謝謝。 –

1

也可以使用values_at提取從陣列的某些元素:

ary = ['no','foo','nop','not at all','bar'] 

foo, bar = ary.values_at(1, -1) 

foo #=> "foo" 
bar #=> "bar" 

此外指數,它也可以接受的範圍:

ary.values_at(0, 2..3) #=> ["no", "nop", "not at all"]