Grundsätzlich muss ich von einem meiner Variable variable_position
jedes Mal erhöhen, wobei das Verfahren set_variable_value
genannt wird, so dass jeder bin_val
Variable durch diese Methode erstellt mit einer anderen inkrementalen variable_position
Parameter von 16. Start erstellt wirdRuby, wie man eine Instanzvariable von einer anderen Methode ändert?
Rechts wissen, es geht von 15 (siehe Methode initialize) bis 16 im ersten Methodenaufruf, aber dann bleibt ich bei 16, egal wie oft die Methode aufgerufen wird.
require "./my_math.rb"
class Rules
attr_accessor :variable_position
JUMP_ARR = [";JGT", ";JEQ", ";JGE", ";JLT", ";JNE", ";JLE", ";JMP"]
def initialize
@variable_position = 15
end
# A instructions have to be 16 bit long
def self.a_16_bit (line)
a_rules = Rules.new
if line[1] == 'R'
bin_val = a_rules.set_reserved_variable_value(line)
elsif (/^[[:alpha:]]+$/).match(line[1..line.length])
bin_val = a_rules.set_variable_value #HERE IS WHERE I CALL THE METHOD
else
bin_val = MyMath.to_binary(line[1..line.length])
end
n = bin_val.to_s.length
m = 16 - n
complete_number = ("0"*m) + bin_val.to_s
end
def set_variable_value
@variable_position += 1 #HERE IS WHERE I TRY TO INCREASE THE VALUE
bin_val = MyMath.to_binary(@variable_position)
end
end
Vielen Dank für das Lesen.
Bitte teilen Sie den Anrufer-Code. Diese Klasse sieht gut aus. – mudasobwa
@mudasobwa ist richtig in der self.a_16_bit Methode; Ich habe einen Kommentar hinzugefügt, damit Sie es einfacher finden können –
@SebastianDelgado nach dem Aufruf von ':: a_16_bit' wird ein neues' Rules'-Objekt erstellt. Jedes Mal, wenn Sie diese Methode aufrufen, initialisieren Sie ein neues Objekt mit einer neuen Instanzvariablen. Außerdem rufst du es nur einmal innerhalb von ':: a_16_bit' an, so dass es sich nur um' 1' ändern kann. Vielleicht sollte '@ variable_position' eine Klasseninstanzvariable sein? – DiodonHystrix