2013-01-15 37 views
-1

我想成爲一個更好的代碼..使我的代碼更清晰,更具可讀性。我該如何在ruby/rails中聲明const變量

我在c/C++中看到的一件事是在局部變量上使用const。我認爲告訴讀者我的代碼有很多價值,一旦設置了變量,它在函數/方法中就不會改變。

我想知道....是否有一種方法來表示局部變量是常量?

#for example 
sql = "select * from table1 where status = #{iStatusId}" 
connection.execute(sql) 

sql在這種方法中不會改變。我可以標記它嗎?

好吧..這是一個不好的例子,但我認爲這一點是由...我希望:)

編輯: 我添加到SQL一點的動態..的iStatusId位是參數傳入該方法。

編輯2: 我沒有谷歌這...所有文章談魔術數字替換。這是一個沒有道理的,我會考慮一個MACRO。 CONTANTS很簡單...我在尋找const ..他們是非常不同的東西。

+0

你試過Google嗎? – rudolph9

+0

如果方法的大小合適,從檢查中就可以看出。雖然我對這個目標有一些同情,但海事組織的許多其他事情顯得更重要。 –

+0

就像@DaveNewton? – baash05

回答

-1

常量只是一個大寫字母開頭的,所以下面的工作就好了:

MY_CONSTANT = 1234 

然而,覆蓋恆定是可能的,儘管它會發出警告。

-2

康斯登的紅寶石並不嚴格合乎邏輯。由於「所有」變量實際上只是指向對象的指針,將它們轉換爲const的c範例是沒有意義的。

它將等於 const void * value ='bla';

您仍然可以更改值[1]。

我很想在這裏被證明是錯誤的。

1

這將是很容易煮了你所描述的邏輯,通過使用這樣的事情:

class Thing 

    def unchangeable_attribute 
     @unchangeable_attribute 
    end 

    def unchangeable_attribute=(value) 
     raise SomeError if @unchangeable_attribute 
     @unchangeable_attribute = value 
    end 

end 

我傾向於戴夫牛頓同意,不過,我也很難想象一個偉大用例這樣的東西...

+0

在其他語言中,常量被編譯爲更小更快的代碼。他們會讓其他人更難以使用你的變量來混淆,因爲我的大多數同事都是「年輕的」,這有助於我發揮作用。 – baash05

+0

http://www.gamedev.net/topic/276374-c-why-use-const/ – baash05

+0

正確...這也是這樣做的,除了「編譯爲更小更快的代碼」這個可能的例外。例如,可能有更好的方法來完成你想要實現的內容,比如一個強大的測試套件,但是這使得該屬性只能設置一次。 –

0

那麼在Ruby對象上定義的obj.freeze方法呢?來自docs

防止對obj進行進一步的修改。如果嘗試修改,則會引發RuntimeError。無法解凍凍結的物體。