2017-02-13 47 views
1

是否有可能標誌着一個實例變量如@var如unassingnable,使得下面的測試將通過?目的是模擬一個只讀變量:紅寶石標記實例變量作爲不可分配

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

@Andrey:請刪除重複的標誌。你提出的問題是相似的,但我問的是禁用完全分配變量的能力(不僅僅是通過異常來構建保護)。 – abstractx1

+0

謝謝你解釋。 – abstractx1

+0

請取消接受我的答案,因爲它並沒有回答有關使變量無法分配的問題(這是不可能的,因爲另一個答案正確地指出) –

回答

3

不,這是不可能的。變量在Ruby中總是可變的。事實上,即使常量在Ruby中也是可變的,它們只在重新分配時纔會生成警告。

+0

在'Test'的本徵類上覆蓋'instance_variable_set'可能會嚴重妨礙它的重置(儘管如此,不會使其變爲_impossible_)。 – mudasobwa