【发布时间】:2016-08-13 22:43:29
【问题描述】:
我试图在初始化方法期间调用类中的方法。这是不允许的吗?我最初有类之外的方法来尝试将其用作全局方法。当前方法试图返回创建的矩阵,然后初始化方法将返回的矩阵保存到实例变量中。
class Member
def setMatrix(a, i, l)
puts "here"
m = Matrix.zero(6)
m[0,0] = a*l**2/i
m[0,3] = -a*l**2/i
m[1,1] = 12
m[1,2] = 6*l
m[1,4] = -12
m[1,5] = 6*l
m[2,1] = 6*l
m[2,2] = 4*l**2
m[2,4] = -6*l
m[2,5] = 2*l**2
m[3,0] = -a*l**2/i
m[3,3] = a*l**2/i
m[4,1] = -12
m[4,2] = -6*l
m[4,4] = 12
m[4,5] = -6*l
m[5,1] = 6*l
m[5,2] = 2*l**2
m[5,4] = -6*l
m[5,5] = 4*l**2
return m
#@k = m
end
def initialize(a, i, l)
@area = a
@i = i
@length = l
@k = setMatrix(a, i, l)
end
end
这样做会返回此错误
`'setMatrix': private method '[]=' called for #<Matrix:0x00000001186e00> (NoMethodError)
from truss_solver.rb:71:in 'initialize'
from truss_solver.rb:86:in 'new'
from truss_solver.rb:86:in 'block in <main>'
from truss_solver.rb:85:in 'each'
from truss_solver.rb:85:in '<main>'`
我希望它在类被实例化时创建一个矩阵的实例变量。我还尝试让 setMatrix 方法直接将矩阵保存到 @k 而不是返回矩阵,这会产生类似的错误。我还能做些什么来实现我想要的?
【问题讨论】:
-
“你说“做这个”会返回这个错误......” 大概,“这个”包括创建
Member的实例(例如,Member.new(1,2,3)),它没有显示。
标签: ruby class matrix object-initializers