module M
def func1_in_M
@some_popular_name = 'some data needed for M'
end
def func2_in_M
p @some_popular_name
end
end
class C
include M
def initilaize
@some_popular_name = "some data needed for C, but this guy didn't know what are used in M"
end
def func1_in_C
p @some_popular_name
end
end
o = C.new
o.func1_in_M
o.func1_in_C# => "some data needed for M"
Этот результат, очевидно, не соответствует кодеру класса C. Такая проблема может быть легко реализована при многомодульном смешивании/мульти-подклассификации. Есть ли хорошее предложение избежать этого? @var ... все равно может привести к тому же. name-mangling-related-to-module .__ id? как?Как избежать конфликтов имен переменных в подклассах или классах, включая модули в Ruby?
Благодарим вас за комментарий. Но я думаю, что это своего рода недостаток Ruby (меньше инкапсуляции), так как Matz подумал, что введение частных экземпляров vars (но не выпущено, у которого есть эта функция еще). Как вы сказали, да, мы могли бы сказать, что переменные экземпляра в модулях также являются частью протокола/контракта между модулями и классом пользователя. – user1729378