【问题标题】:Passing an array as an argument in Ruby在 Ruby 中将数组作为参数传递
【发布时间】: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 这样的好名字

标签: arrays ruby


【解决方案1】:

我只是想感谢大家的回复并发布有效的代码。看来我在参数所在的地方有 [] 并且缺少导致它失败的结尾。

def alternate_sq_sum(a)
  even = a.select.each_with_index { |str,i| i.even? }
  odd = a.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

  total = even_sum + odd_sum
  total
end

alternate_sq_sum([1,2,3,4,5])

【讨论】:

    【解决方案2】:

    有一件事还不清楚:我们必须在偶数位置取整数平方,但你取赔率平方,这段代码有效!但是如果 int 是偶数,则方法甚至返回 true

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-12
      • 2010-10-01
      • 1970-01-01
      • 2015-04-07
      • 2021-06-02
      • 2011-03-17
      • 2010-10-06
      • 2020-01-19
      相关资源
      最近更新 更多