class Array
def pairs(target)
pairs_array = []
self.each_with_index do |number, idx|
self.each_with_index do |number2, idx2|
if (number + number2 == target)
pairs << [idx, idx2]
end
end
end
pairs
end
end
arr = Array.new
arr << "1" << "3" << "1" << "2" << "3" << "0"
puts arr.pairs(3)
错误讯息:
Traceback (most recent call last):
2: from main.rb:42:in `<main>'
1: from main.rb:36:in `pairs'
main.rb:27:in `pairs': wrong number of arguments (given 0, expected 1) (ArgumentError)
我对此比较陌生,所以如果这是一个愚蠢的问题,我很抱歉,但我只是错误地调用了这个方法吗?我试图调用它并传递3作为目标值。
感谢。
答案 0 :(得分:2)
问题是,你的对方法中的最后一个语句是&#34; pair&#34;,这意味着你做了另一个(这次是递归的)函数调用。此函数调用在没有参数的情况下发生,这会导致错误。
我假设你真的想把所有的结果都放到变量&#34; pairs_array&#34;并返回它(而不是&#34;对&#34;)。
此外
if (number + number2 == target)
#some code
end
与
结合使用arr = Array.new
arr << "1" << "3" << "1" << "2" << "3" << "0"
puts arr.pairs(3)
将始终返回false,例如&#34; 1&#34; +&#34; 2&#34;是&#34; 12&#34;,而1 + 2是3. =&gt;请注意您正在使用的数据类型。
答案 1 :(得分:1)
问题是ruby正在解释这一行
pairs
作为函数调用
pairs(target)
而不是退货声明。要解决此问题,请重命名pairs
数组变量,使其与您的函数名称不匹配。我相信您已经以pairs_array = []
的形式完成了此操作,因此您应该拨打pairs << [idx, idx2]
&lt;&lt; pairs_array
来调用pair_array
。 [idx,idx2]存储对。然后,要返回数组,请在函数末尾调用const {a, c} = obj
。
另一个错误是您将数字作为字符串而不是整数传递,因此当您将两个变量一起添加时,ruby正在进行字符串连接,而不是简单地将两个数字相加,以解决此问题,传入数字为整数(即删除数字周围的引号)