0

我正在尝试学习 ruby​​,并且对将对象数组作为函数参数传递并在函数中打印它有疑问。

我有一个包含对象数组的数组,如下所示

describe Name
par1 = "John"
par2 = "Miley"
par3 = "Maria"
@obj_arr = [Name.new(par1),Name.new(par2),Name.new(par3)]
Name.func1(@obj_arr)

我想在函数中打印名称“John”、“Miley”和“Maria”,我编写的函数 func1 如下:

def self.func1(parameter)
parameter.each do |p|
puts p
end
end

这没有打印名称。我在访问函数中的 obj_arr 时出错了吗?

4

2 回答 2

0

我认为您的问题可能是对象的 to_s 方法。您应该覆盖它以打印您想要的内容。顺便说一句,您问题中的语法有点不对劲。我认为函数的定义应该是 def self.func1 并且你错过了一个结束。这是我测试的代码:

irb(main):001:0> class Name
irb(main):002:1> def self.func1(parameter)
irb(main):003:2> parameter.each do |p|
irb(main):004:3* puts p
irb(main):005:3> end
irb(main):006:2> end
irb(main):007:1> end
=> nil
irb(main):008:0> class Name
irb(main):009:1> def initialize(name)
irb(main):010:2> @name = name
irb(main):011:2> end
irb(main):012:1> end
=> nil
irb(main):013:0> Name.func1([Name.new('a'), Name.new('b')])
#<Name:0x2163dc8>
#<Name:0x2163d98>
=> [#<Name:0x2163dc8 @name="a">, #<Name:0x2163d98 @name="b">]
irb(main):014:0> class Name
irb(main):015:1> def to_s
irb(main):016:2> @name
irb(main):017:2> end
irb(main):018:1> end
=> nil
irb(main):019:0> Name.func1([Name.new('a'), Name.new('b')])
a
b
=> [a, b]
irb(main):020:0>
于 2012-08-03T06:16:55.667 回答
0

可能是 func1 是在类 Name 的实例上定义的,而不是在类本身上?

尝试:

  class Name
    def self.func1(parameter)
      parameter.each do |p|
        puts p
      end   
    end 
  end
于 2012-08-03T06:19:07.360 回答