Не используя @@ f напрямую, а вместо class_variable_set () и class_variable_get (), переменные класса A, B и C можно использовать изнутри M.
module M
def f=(x)
class_variable_set("@@f", x)
end
def f
class_variable_get("@@f")
end
end
class A
extend M
end
class B < A
end
class C
extend M
end
A.f= 42
C.f= 23
puts A.f
puts B.f
puts C.f
это производит
42
42
23
Как видите, переменные являются общими для A и B, но не для C.