2012-06-02 40 views
1

寫作業如CONST = some_var將提高SyntaxError,因爲紅寶石中的常量不能被重新分配。如何將變量的值賦給常量?

但在某些情況下,我想將當前變量的保存在一個常量中,並將其鎖定在那裏。

例如,當我從一個類初始化一個實例時,我想鎖定實例中傳入的值。我應該如何以正確的方式在紅寶石上做到這一點? (下面是紅寶石努力實現它非法代碼,你的想法)

class SomeClass 
    def initialize(status) 
    STATUS = status # it is illegal now 
    end 
end 

回答

2

Ruby的常量有望保持相同的值,它是一個recommendation,不是必須的:

Ruby常量就像一個變量,除了它的值應該在程序期間保持不變。 Ruby解釋器實際上並不強制常量的恆定性,但如果程序更改常量的值,它會發出警告。

1

使用帶有getter和setter的實例變量。就像這樣:

class SomeClass 
    attr_reader :status 
    def initialize(status) 
    @status = status 
    end 
end 

現在你可以使用你的對象是這樣的:

>> a = SomeClass.new(5) 
=> #<SomeClass:0x108c80218 @status=5> 
>> a.status 
=> 5 
>> a.status=7 
NoMethodError: undefined method `status=' for #<SomeClass:0x108c80218 @status=5> 
from (irb):9