Ruby on rails Ruby将实例变量标记为不可分配

Ruby on rails Ruby将实例变量标记为不可分配,ruby-on-rails,ruby,Ruby On Rails,Ruby,是否可以将@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 h

是否可以将@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

不,这是不可能的。变量在Ruby中总是可变的。事实上,在Ruby中,即使常数是可变的,它们只有在重新分配时才会生成警告。

@Andrey:请删除重复标志。您提出的问题与此类似,但我想问的是禁用完全分配变量的功能(不仅仅是通过异常构建保护)。感谢您的解释。请不要接受我的回答,因为它没有回答关于使变量不可分配的问题(这是不可能的,因为另一个答案正确地指出)Ruby中有只读变量(例如
$overwrited
instance\u variable\u set
on
Test
的特征类可能会极大地妨碍它的重置(但这并不是为了让它不可能)