如何将两种方法都合并为一种方法?

时间:2020-05-09 19:12:02

标签: ruby web-scraping methods command-line-interface

我正在制作吉他浏览cli项目。我有两个类别ElectricAcoustic。 我为这两个类别都制作了2种方法:mass_create_electricsmass_create_acoustics

@@electrics = []
@@acoustics = []

def self.electrics
    @@electrics
end

def self.acoustics
    @@acoustics
end

def self.mass_create_electrics(electric_hash)
    electric_hash.each do |e_hash|
        electric = HiStrung::Guitar.new(e_hash[:name], e_hash[:url])
        @@electrics << electric
    end
end

def self.mass_create_acoustics(acoustic_hash)
    acoustic_hash.each do |a_hash|
        acoustic = HiStrung::Guitar.new(a_hash[:name], a_hash[:url])
        @@acoustics << acoustic
    end
end

如您所见,这两种方法都在做相同的事情,因此我的目标是仅制作一种同时实例化电吉他和原声吉他的方法。这是我应该做的清单。

  • 在Guitar类中创建一个.mass_create_guitars方法,该方法接受2个参数 (吉他哈希和吉他类别)
  • 该方法应该能够用于实例化两个电吉他 和民谣吉他
  • 第二个参数将确定是否 吉他会添加到您的@@ electrics或@@ acoustics的收藏中
  • 此方法应替换mass_create_electrics和mass_create_acoustics 这样您就不会再有两种方法可以做几乎相同的事情了。

所以这是我到目前为止的方法:

def self.mass_create_guitars(guitar_hash, category)
    guitar_hash.each do |g_hash|
        guitars = HiStrung::Guitar.new(g_hash[:name], g_hash[:url])

    end
end

但是我不确定从这里去哪里。

1 个答案:

答案 0 :(得分:0)

两种方法之间的两个区别是:

  • 中拉出吉他的哈希
  • 将吉他推入
  • 的阵列

因此,这两件事应该是参数。哈希已经是一个参数,因此您所需要做的就是将数组添加为第二个参数:

def self.mass_create_guitars(guitar_hash, guitar_array)
  guitar_hash.each do |guitar|
    guitar_array << HiStrung::Guitar.new(guitar_hash[:name], guitar_hash[:url])
  end
end

def self.mass_create_electrics(electric_hash)
  mass_create_guitars(electric_hash, electrics)
end

def self.mass_create_acoustics(acoustic_hash)
  mass_create_guitars(acoustic_hash, acoustics)
end

顺便说一下,electric_hashacoustic_hash是奇怪的名字,因为它们显然不是哈希,它们看起来更像是数组。