是否可以将@var等实例变量标记为无法使用,以便以下测试通过?目的是模拟一个只读变量:
class Test
def initialize(var)
@var = var
@var.freeze
make_unassignable(:@var)
end
def set_var(new_var)
@var = new_var
end
def make_unassignable(symbol)
#insert algorithm here
end
end
test = Test.new('some var')
expect { test.set_var = 'some other var' }.to raise_error
expect { test.instance_variable_set(:@var, 'some other var') }.to raise_error
答案 0 :(得分:3)
不,这是不可能的。变量在Ruby中是可变的,总是如此。实际上,即使常量在Ruby中也是可变的,它们只在重新分配时生成警告。