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 に答える