Chcę wiedzieć, jak zachowują się zmienne instancji modułu Ruby w wielu klasach, które "mieszają" je w ". Napisałem przykładowy kod, aby go przetestować:Czy zmienne instancji modułu są wspólne dla klasy z mixinem?
# Here is a module I created with one instance variable and two instance methods.
module SharedVar
@color = 'red'
def change_color(new_color)
@color = new_color
end
def show_color
puts @color
end
end
class Example1
include SharedVar
def initialize(name)
@name = name
end
end
class Example2
include SharedVar
def initialize(name)
@name = name
end
end
ex1 = Example1.new("Bicylops")
ex2 = Example2.new("Cool")
# There is neither output or complains about the following method call.
ex1.show_color
ex1.change_color('black')
ex2.show_color
Dlaczego to nie działa? A może ktoś mógłby wyjaśnić, co będzie rzeczywiste zachowanie @color
w wielu instancjach Example$
?
Dość jasne wyjaśnienie! Więc jeśli zaprojektowany przeze mnie moduł jest przeznaczony do mieszania z inną klasą. Powinienem zdefiniować 'instancyjną zmienną' wewnątrz' metody instancji', czy moje zrozumienie jest poprawne? – steveyang
Tak, po prostu obliczyć, co jest aktualnym self, a następnie można zrozumieć, gdzie zostanie umieszczona zmienna instancji. – megas
Dzięki. Właśnie uczę się Ruby, a nie "bieżącej jaźni". Wydaje się być bardziej eleganckim językiem niż "javaScript". – steveyang