Ruby标记实例变量为不可分配的

时间:2017-02-13 11:08:49

标签: 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 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

1 个答案:

答案 0 :(得分:3)

不,这是不可能的。变量在Ruby中是可变的,总是如此。实际上,即使常量在Ruby中也是可变的,它们只在重新分配时生成警告。