我使用以下类定义
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字符串列表(它是方法中的最后一个赋值,应该是那个)我做错了什么?
答案 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
(错字?),如果不能修复该部分。