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' ]  ) )

我收到“错误数量的参数(3 代表 0)”错误。但是当我改用

       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 回答
0

首先,你有def self.initializewhich 应该更改为,def initialize因为它是一个构造函数。构造函数是一种在您执行此操作时会被调用的方法,Class.new因为您已将构造函数定义为您收到错误的类方法。

其次,调用构造函数,如果不修复该部分initialize,您正在调用initialise(错字?)。

于 2013-05-21T10:36:52.207 回答