基本上,每次调用方法variable_position
时,我需要增加一个变量set_variable_value
,因此通过该方法创建的每个bin_val
变量都会使用不同的增量创建variable_position
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
1}}参数从16开始。
正确地知道,它在第一次方法调用中从15(参见initialize方法)变为16,但无论方法被调用多少次,我都会保持在16位。
SalesForm frmSales = Application.OpenForms.OfType<SalesForm>().SingleOrDefault();
frmSales.txtSUMMARY.Text = dateTimePicker1.Value.ToLongDateString();
frmSales.Show();
this.Close();
非常感谢阅读。
答案 0 :(得分:3)
当您致电a_rules = Rules.new
时,您正在创建一个新的规则实例。因此,构造函数initialize
正在为每个实例将@variable_position
值设置为15。
然后,当您调用方法bin_val = a_rules.set_variable_value
时,它会增加@variable_position
的值一次,因为您仍然在处理同一个实例。
我建议@variable_position
应该是一个类变量。这样,每次实例化新对象时,您都不会重置它的值。
答案 1 :(得分:1)
您根本不需要该对象的实例:
require "./my_math.rb"
class Rules
JUMP_ARR = [";JGT", ";JEQ", ";JGE", ";JLT", ";JNE", ";JLE", ";JMP"]
@variable_position = 15
# A instructions have to be 16 bit long
def self.a_16_bit (line)
bin_val = if line[1] == 'R'
# code from set_reserved_variable_value(line) here
elsif (/^[[:alpha:]]+$/).match(line[1..line.length])
MyMath.to_binary(@variable_position += 1)
else
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
end
在当前的代码中,您正在搞乱实例变量和类方法。