与对象初始化/实例变量混淆

时间:2013-05-21 10:30:45

标签: ruby-on-rails ruby

我使用以下类定义

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

我得到了#34;错误的参数数量(3为0)&#34;错误。但是当我使用

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

方法list返回一个url字符串列表(它是方法中的最后一个赋值,应该是那个)我做错了什么?

2 个答案:

答案 0 :(得分:1)

要在self.new来电中删除该错误,请将def self.initialize ( id, name, url )更改为def initialize ( id, name, url )self.new尝试通过调用默认的Workflow方法来创建initialize实例,该方法不接受任何参数,但是您提供了参数,这反过来又会引发错误。

答案 1 :(得分:0)

首先你有def self.initialize,因为它是一个构造函数,所以应该更改为def initialize。构造函数是一种在执行Class.new时被调用的方法,因为您已将构造函数定义为您正在获取错误的类方法。

第二个构造函数被称为initialize并且您正在调用initialise(错字?),如果不能修复该部分。