2016-11-11 47 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