0

次のクラス定義を使用します

 class Workflow
    # class << self; attr_acessor :id, :name, :url  end
    # Please ignore the troubleshooting attemp above it didn't help, I got the ObjectNil

    def self.initialize ( id, name, url )
      @id = id
      @name = name
      @url = url
    end

    # @return [Object]
    def  self.list
      ret = Array.new
      wf = Hash.new
      vco = Vco.new
      vco.getAll.each do |link|
        link['attributes'].each do |attr|
          wf[ attr['name'] ] = attr[ 'value' ]
        end
        ret.push( self.new( wf[ 'id' ], wf[ 'name' ], wf[ 'itemHref' ]  ) )
      end
      return   ret
    end

使用されます:

  <% @workflows.each do |wf| %>
      <tr>
        <td><%= wf.id %></td>
        <td><%= wf.name %></td>
        <td><%= wf.url %></td>
      </tr>
  <% end %>

したがって、メソッドWorkflow.listはワークフローの配列を返す必要があります。ただし、期待どおりには機能しません。私が使うとき

        ret.push( self.new( wf[ 'id' ], wf[ 'name' ], wf[ 'itemHref' ]  ) )

「引数の数が間違っています (0 に対して 3)」というエラーが表示されます。しかし、代わりに使用すると

       ret.push( self.initialize( wf[ 'id' ], wf[ 'name' ], wf[ 'itemHref' ]  ) )

メソッドlistは URL 文字列のリストを返します (これはメソッドの最後の割り当てであり、そうあるべきです) 何が間違っていますか?

4

2 に答える 2

1

self.new呼び出し時にそのエラーを削除するには、 を に変更def self.initialize ( id, name, url )def initialize ( id, name, url )ます。引数を取らないデフォルトメソッドを呼び出しself.newてインスタンスを作成しようとしますが、引数を提供しているため、エラーがスローされます。Workflowinitialize

于 2013-05-21T10:35:18.357 に答える