Ich schreibe einen Compiler in Ruby, und ich habe viele Klassen, in denen Instanzmethoden Instanzvariablen ändern. Zum Beispiel mein Lexer (der Teil, der Token in dem Code findet), funktioniert wie folgt:Sollen Methoden Instanzvariablen in Ruby modifizieren?
class Lexer
attr_accessor :tokens
def initialize(input)
@input = input
@tokens = nil
end
def lex!
# lex through the input...
# @tokens << { lexeme: 'if', kind: :if_statement }
@tokens
end
end
lexer = Lexer.new('if this then that')
lexer.lex! # => [ { lexeme: 'if', kind: :if_statement }, ... ]
lexer.tokens # => [ { lexeme: 'if', kind: :if_statement }, ... ]
Ist dies eine gültige Praxis? Oder sollte ich einen Ansatz verwenden, bei dem die Methoden (wie #lex
) die Eingabe übernehmen und die Ergebnisse zurückgeben, ohne die Instanzvariablen zu ändern?
Nein, es tut nichts anderes mit '@ Token'. Ich denke, dass so ziemlich meine Frage beantwortet, danke! –
@EthanTurkeltaub \t Es ist eine Art der funktionalen gegenüber nicht-funktionalen Ansatz, wirklich. –