将类方法分配给已建立的元素?

时间:2016-07-05 01:02:31

标签: arrays ruby class loops assign

我正在开发一些Ruby项目。我还在学习Ruby的一些基本原则,但我需要一些帮助来处理我遇到的特定问题。 我需要使用与类关联的方法分配一些已经创建的元素。我怎么能这样做呢? 这是我的榜样。

让我们说我有一个数组数组

my_pets = ['Buddy the iguana', 'Coco the cat', 'Dawn the parakeet']

我还有一个课程,我已经编写了一个我需要my_pets数组才能访问的特定功能。基本上,这个函数循环遍历一个字符串数组并替换" a"与" @"。

class Cool_Pets

    def a_replace(array)
        array.each do |string|
            if string.include?("a")
                string.gsub!(/a/, "@")
            end
        end
     puts string
   end

end 

有没有办法将my_pets指定为Cool_Pets类的一部分,以便它可以使用a_replace方法?

这是我想要的结果:

a_replace(my_pets) = ['Buddy the igu@na', 'Coco the c@t', 'D@wn the p@r@keet']

2 个答案:

答案 0 :(得分:1)

您可以在此处使用Enumerable#map

my_pets.map{ |s| s.gsub(/a/,'@') }
#=> ["Buddy the igu@n@", "Coco the c@t", "D@wn the p@r@keet"]

您的代码几乎可以使用,只需删除puts arrayif语句即可。然后只需调用该函数。

#Use CamelCase for class names NOT snake_case.
#Using two spaces for indentation is sensible.
class CoolPets 
  def a_replace(array)
    array.each do |string|
      string.gsub!(/a/, "@")
    end
  end
end

cool = CoolPets.new
my_pets = ['Buddy the iguana', 'Coco the cat', 'Dawn the parakeet']
p cool.a_replace(my_pets)
#=> ["Buddy the igu@n@", "Coco the c@t", "D@wn the p@r@keet"]

答案 1 :(得分:0)

不确定这是否是您要找的,但请查看 Mixins http://ruby-doc.com/docs/ProgrammingRuby/html/tut_modules.html#S2

module CoolPet
  def a_replace(array)
    array.each do |string|
      if string.include?("a")
        string.gsub!(/a/, "@")
      end
    end

    puts array.inspect
  end
end

class MyPet
  include CoolPet
end

array = ['Buddy the iguana', 'Coco the cat', 'Dawn the parakeet']
pet = MyPet.new
pet.a_replace(array) # => ["Buddy the igu@n@", "Coco the c@t", "D@wn the p@r@keet"]