定义一个作用于数组的函数

kry*_*tah 0 ruby

在Ruby中,我们定义类成员函数

class Dog
  def bark
    puts "woof"
  end
end
Run Code Online (Sandbox Code Playgroud)

我想知道并且在google搜索中彻底失败的是,在Ruby中如何以及在何处定义处理对象数组的方法?

我希望能够做到这样的事情:

dogs = [Dog.new, Dog.new, Dog.new]
dogs.some_function
Run Code Online (Sandbox Code Playgroud)

我如何定义some_function

注意:我不是在解决特定问题之后,更多的是如何定义这样一个函数的步骤.

Uri*_*ssi 5

为了让你的所有狗都吠叫,你应该each在阵列上使用:

dogs.each(&:bark)
Run Code Online (Sandbox Code Playgroud)

这相当于

dogs.each { |dog| dog.bark }
Run Code Online (Sandbox Code Playgroud)

很少需要数组定义方法,在这种情况下,它将在所有数组上都可用,包含任何内容.要做到这一点,你需要声明它里面Array类,再次声明它:

class Array
  def some_function
    # do something...
  end
end
Run Code Online (Sandbox Code Playgroud)

然后你可以运行:

dogs = [Dog.new, Dog.new, Dog.new]
dogs.some_function
Run Code Online (Sandbox Code Playgroud)

并且

numbers = [1, 2, 3, 4]
numbers.some_function
Run Code Online (Sandbox Code Playgroud)