Ich versuche, eine Methode in einer Klasse während seiner Initialisierungsmethode aufzurufen. Ist das nicht erlaubt? Ich hatte ursprünglich die Methode außerhalb der Klasse, um sie als globale Methode zu verwenden. Die aktuelle Methode versucht, die erstellte Matrix zurückzugeben, und dann speichert die Initialisierungsmethode die zurückgegebene Matrix in einer Instanzvariablen.Wie rufen Sie die Methode class from initialize auf?
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
dies tun gibt diesen Fehler zurück
`'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>'`
ich möchte es eine Instanzvariable einer Matrix machen, wenn die Klasse instanziiert wird. Ich habe auch versucht, die Methode setMatrix zu speichern, um die Matrix in @k direkt zu speichern, anstatt die Matrix zurückzugeben, und das gab einen ähnlichen Fehler. Wie kann ich sonst noch erreichen, was ich will?
„Du hast gesagt,‚dies zu tun‘gibt diesen Fehler zurück ...“ Vermutlich " dies "beinhaltet die Erzeugung einer Instanz von" Member "(zB" Member.new (1,2,3) "), die nicht gezeigt wird. –