如何将数组作为参数传递给一个方法?

13 浏览
0 Comments

如何将数组作为参数传递给一个方法?

我想将一个包含尽可能多值的数组作为参数传递给这个方法。例如,如果我输入[1,2,3]add([1,2,3]中,我应该得到数组的总和值。

由于我对Ruby还不熟悉,不太清楚如何进行操作。请有人给我解释一下。

0
0 Comments

在之前的问题中,我猜测你想要能够区分数组参数和数字参数。尝试使用kind_of?方法,并根据结果进行分支。参考这个问题获取其他建议(使用respond_to?方法更符合惯用方式)。

def add(val)
  if (val.kind_of?(Array))
    # add each element
  else
     += val
  end
end

要进行加法运算,你需要使用each方法来对数组的每个元素执行操作。

val.each do |x|
   += x
end

为什么要使用kind_of?,直接使用if val.respond_to? :each不就行了吗?

不,我会使用#instance_of?。有很多可以响应#each的对象。或者,你也可以使用respond_to?(:to_ary)... #kind_of用于kindness#instance_of?用于strictness... 🙂 你可以自行决定你想要的是什么。哈哈。

是的,我想要根据字面上的意思回答问题,以防万一visBar以后想要区分其他集合。你不会希望在数组和哈希表上执行相同类型的each操作。

确实有很多对象可以响应each,所以记录下默认用法(对于类似数组的集合),并让方法接受一个块,调用者应该知道自己传递了什么。在我负责的代码库中,像这样的情况使用instance_of,你无法通过代码审查。

0
0 Comments

在这个帖子中,Andrew提到了如何将数组作为参数传递给一个方法。然而,有一个读者认为Andrew的方法不够常见。相反,他认为更常见的方法是使用is_a方法来判断参数是否为数组。

以下是使用is_a方法的示例代码:

def add(val)
  if val.is_a?(Array)
    # 当参数为数组时执行某些操作
  else
    # 当参数不是数组时执行某些操作
  end
end

这段代码首先使用is_a方法来判断参数val是否为数组。如果是,将执行# 当参数为数组时执行某些操作的代码块。如果不是,将执行# 当参数不是数组时执行某些操作的代码块。

通过使用is_a方法,我们可以根据参数的类型来执行不同的操作。这样可以增加方法的灵活性和适用性。

0
0 Comments

在这个问题中,问题的原因是如何将一个数组作为参数传递给一个方法。解决这个问题的方法是使用可变数量的参数来传递数组。

通常的做法是使用可变数量的参数,假设从你的问题中可以得出参数是Numeric类型的。代码如下:

def add_em_up(*args)
  args.reduce(:+)
end
add_em_up(1,2,3,4)    # => 10
add_em_up(1,2,3.5,4)  # => 10.5

这段代码使用了#reduce方法和贪婪操作符*。它真的很贪婪...嗯...

我觉得这有点有趣。发帖后的18个小时里,我收到了10个赞同的答案,但这个答案在某种程度上还算不上是“令人惊叹的”,然而我过去做出的许多杰出贡献却没有获得一个+1。我猜这就是SO的生活。

我同意,这就是SO的生活。

0