Переменная экземпляра в моем коде продолжает переопределяться, несмотря на то, что для этого не было никаких команд. По существу, переменная вызывается только дважды: один раз, чтобы назначить ее значение при запуске, а затем скопировать ее значение в другую переменную. Код, я работаю на это немного сложно для меня, чтобы разместить его здесь полностью, но это основное изложение его:Ruby - переменная переменной экземпляра сама по себе
class Test
def self.initialize
@problem_var = [ ["1 2 3", "4 5 6"], ["a b c", "d e f"], ["bar", "foo"] ]
end
def self.main_method(parVar)
data = @problem_var
result = "Lorem"
#Iterate through subarrays
data.each do |dataBlock|
#Some code here
if condition then
#The first subarray meets the condition
char = dataBlock[1]
#At this point char is equal to "4 5 6"
#@problem_var still holds its original value of:
# [ ["1 2 3", "4 5 6"], ["a b c", "d e f"], ["bar", "foo"] ]
result = OtherModule.replace_six(char)
#By this point, char is now equal to "4 5 7"
#Curiously @problem_var is now equal to:
# [ ["1 2 3, "4 5 7"], ["a b c", "d e f"], ["bar", "foo"] ]
end
end
#More code here
return result
end
end
Что-то странное происходит с переменной сразу после result
имеет значение, присвоенное ему. Кроме того, это, похоже, происходит только однажды, так что, если код должен был запускаться снова и изменить его, чтобы сказать ... 8, @problem_var
не будет обновляться. Изменение константы @problem_var
не позволило предотвратить ее изменение. Я обдумал это за последние две недели и не смог понять это. Кто-нибудь знает, что может произойти?
Редактировать: Вы, ребята, были правы! Вопрос был в OtherModule. Я использовал gsub!
по переменной параметра, которая получила char
. Вот упрощенный OtherModule код для дальнейшего использования:
module OtherModule
def replace_six(input)
modified_string = ""
if condition(input) then
#Input meets condition
first_string = replace_numbers(input)
#The following method doesn't really apply here
second_string = replace_letters(first_string)
modified_string = second_string
end
return modified_string
end
def replace_numbers(text)
#Some code here
#The following condition for numbers in `text`
if condition(text) then
text.gsub!("6", numberFunction)
#numberFunction returns a string
end
return text
end
end
Похоже, метод replace_six изменяет переданное ему значение –
Поделитесь кодом 'OtherModule.replace_six (char)' –