【发布时间】:2015-07-30 03:40:53
【问题描述】:
我一直在学习 Ruby,并且正在尝试一个问题,该问题将一个数字数组作为输入,将数组中偶数位置的整数平方,然后将平方整数 + 数组中奇数位置的整数相加。 (1,2,3,4,5 应该返回 29)。我让它运行,但是,我无法将数字作为参数传递。每次我尝试定义方法并在调用方法时传入数组,都会出错。
基本上,我希望方法是:
def alternate_sq_sum([]) 以及通过调用该方法传递任何数字数组的能力。
Ex. alternate_sq_sum([1,4,63,2,1]).
这是我当前的代码:
arr = [1,2,3,4,5]
even = arr.select.each_with_index { |str,i| i.even? }
odd = arr.select.each_with_index {|str,i| i.odd? }
even_sum = 0
even.map do |n|
even_sum +=n
end
odd_sum = 0
odd.map do |n|
n*=n
odd_sum+=n
end
print even_sum + odd_sum
【问题讨论】:
-
您遇到了哪个错误?您应该显示您尝试过的导致错误的代码;不仅仅是有效的部分。
-
您只需要命名参数,例如
def alternate_sum(a),然后使用a,因为它是一个数组,在其上调用数组方法。也许在方法的开头检查它是否是一个数组 -
对不起,如果我太简短了。我收到一个语法错误,指出我无法像这样传递数组... def arr([a])。然后,我尝试添加 splat * 并没有奏效。然后我卸下了支架并摔碎了,它终于起作用了。我也错过了该方法的结束。为什么 splat 和括号不起作用?我很困惑。
-
另外有效的代码是:
def alternate_sq_sum(a)并像这样称呼它alternate_sq_sum([1,2,3,4,5])所以谢谢@blueygh2 :)。有谁知道为什么 splat 参数在这里不起作用? -
@dwhipple 您需要 named 参数,为 array 传递诸如
[]之类的类型不起作用。你不能告诉 ruby 参数是什么类型,所以你最好为数组选择像 arr 这样的好名字