【问题标题】:Pull names out of array and add line break after each将名称拉出数组并在每个名称后添加换行符
【发布时间】:2013-02-11 01:35:31
【问题描述】:

下面是我为一小段 Ruby 代码编写的单元测试。

subject { AutoShop.new 'Mr. Fix It', 'WA987654321', Employee.new('Sue', 'Owner', 0) }

it '#employee_list returns list of employee names' do
  # setup
  input = [Employee.new('Lou', 'Receptionist', 90_000)]
  subject.append_employees input
  subject.employee_list.should eq "Sue\nLou"
end

这是该类的代码。但是,我无法在 employee_list 方法中正确显示名称。我是 Ruby 的新手,所以任何建议都将不胜感激。

class AutoShop < Business

    attr_accessor :employees

  def initialize(name, tax_id, employee)
    super(name, tax_id)
    @employees = []
    @employees << employee
  end   

  def append_employees(input)
    input.map { |x| @employees << x  }  
  end

  def employee_list
    @employees.map {|x| x.name}
  end   

end     

【问题讨论】:

    标签: ruby-on-rails ruby arrays ruby-on-rails-3


    【解决方案1】:

    您的employee_list 方法应根据您的单元测试输出每个名称,并用换行符\n 分隔。因此,添加一个.join("\n") 以从数组中生成一个字符串。

    def employee_list
      @employees.map {|x| x.name }.join("\n")
    end  
    

    .map 也可以使用“pretzel-colon”速记来完成:

    @employees.map(&:name).join("\n")
    

    【讨论】:

      【解决方案2】:

      虽然@MichaelBerkowski 已经回答了你的主要问题,但我会注意你的append_employees 方法看起来有点奇怪。您可能会使用Array#each,而不是Array#map。虽然 @employees 变量不受该更改的影响,但返回值不同(不必要地占用您的内存)。比较:

      2.0.0-preview2 :001 > input = [1, 2, 3, 4]
       => [1, 2, 3, 4] 
      2.0.0-preview2 :002 > e = [] ; input.each { |x| e << x  }
       => [1, 2, 3, 4] 
      2.0.0-preview2 :003 > e = [] ; input.map { |x| e << x  }
       => [[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]] 
      

      【讨论】:

        猜你喜欢
        • 2021-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-01
        • 1970-01-01
        • 2019-05-26
        • 1970-01-01
        • 2017-12-16
        相关资源
        最近更新 更多