2016-11-11 76 views
-1

我想選擇以數組開頭的所有元素。這裏是我的代碼從特定字符開始的數組中選擇元素

a = ['bananas', 'apples', 'pears', 'avocados'] 
def select_elements_starting_with_a(a) 
a.select { |str| str.start_with?('a') } 
end 
puts select_elements_starting_with_a 

我得到的錯誤是

Untitled.rb:3:in `select_elements_starting_with_a': wrong number of arguments (0 for 1) (ArgumentError) 
from Untitled.rb:6:in `<main>' 
+0

我有一種感覺,你可能希望看到實際打印的數組在哪種情況下(以及下面的答案)使用'p'而不是'puts'。 –

回答

4

@Ursus和@Adam是正確的。但還有一點我想提出。

當你在編程時,你的名字的方式有時會表明問題的定義有多清晰。你已經犯了這個小混亂,可能是因爲a在你的代碼中扮演了很多角色:a是帶有水果名字的數組名稱; a也是您的方法使用的正式參數的名稱。

此外,這種方法是非常具體的。太好了,我必須告訴你。假設你的程序後來應該識別以字母b開頭的所有元素。我不得不創建另一種方法,使用幾乎相同的代碼。

我的建議,使你的代碼可重用真正重新定義方法

def select_elements_starting_with(arr,letter) 
    arr.select { |str| str.start_with?(letter) } 
end 

現在你可以找到以任何陣列中的任何信函元素,你將不會冒險忘卻通過,因爲你的paramenter將不會混淆正式參數和正在處理的實際數組實例。

3
puts select_elements_starting_with_a 

應該

puts select_elements_starting_with_a(a) 

你的方法期待一個參數,以及要傳遞什麼。

1

你的函數需要一個參數,但你不給它一個:

puts select_elements_starting_with_a a