【问题标题】:How can I combine both of my methods to just one method?如何将我的两种方法组合成一种方法?
【发布时间】:2020-05-09 19:12:02
【问题描述】:

我正在制作一个吉他浏览 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】:

    这两种方法的两个区别是:

    • 吉他被拉出的哈希
    • 吉他被推的数组

    所以,这两个东西应该是参数。哈希已经是一个参数,所以你需要做的就是添加数组作为第二个参数:

    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 是奇怪的名字,因为它们显然不是哈希,它们看起来更像数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-02
      相关资源
      最近更新 更多