Ruby 使用手冊

類別常數 Class constants

常數都是以大寫字母開頭, 最多獲指派一個值。在 Ruby 中,重新指派一個常數,會出現警告而不是錯誤(eval.rb 的非 ANSI 版並不會出現警告):

ruby>fluid=30
   30
ruby>fluid=31
   31
ruby>Solid=32
   32
ruby>Solid=33
   (eval):1: warning: already initialized constant Solid
   33

常數可於類別內定義,與實例常數不同的是,常數可於類別以外存取。

ruby> class ConstClass
    |   C1=101
    |   C2=102
    |   C3=103
    |   def show
    |     puts "#{C1} #{C2} #{C3}"
    |   end
    | end
   nil
ruby> C1
ERR: (eval):1: uninitialized constant C1
ruby> ConstClass::C1
   101
ruby> ConstClass.new.show
101 102 103
   nil

常數可於模組內定義。

ruby> module ConstModule
    |   C1=101
    |   C2=102
    |   C3=103
    |   def showConstants
    |     puts "#{C1} #{C2} #{C3}"
    |   end
    | end
   nil
ruby> C1
ERR: (eval):1: uninitialized constant C1
ruby> include ConstModule
   Object
ruby> C1
   101
ruby> showConstants
101 102 103
   nil
ruby> C1=99  # 這樣不好
   99
ruby> C1
   99
ruby> ConstModule::C1
   101
ruby> ConstModule::C1=99   # ⋯⋯ 在舊版本中這是不允許的
   (eval):1: warning: already initialized constant C1
   99
ruby> ConstModule::C1  # 「自討苦吃」
   99

Copyright (c) 2005-2008 Mark Slagell,中文翻譯 Ruby Taiwan 社群

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.

A copy of the license is included in the section entitled "GNU Free Documentation License."