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

问题描述 投票:0回答:1

我正在制作吉他浏览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这样您就不再有2种方法几乎可以做同样的事情。

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

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

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

ruby web-scraping methods command-line-interface
1个回答
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是奇怪的名字,因为它们显然不是哈希,它们看起来更像是数组。

© www.soinside.com 2019 - 2024. All rights reserved.