类常量

Class constants

类常量

A constant has a name starting with an uppercase character.

常量的名称以大写字母开头。

It should be assigned a value at most once.

它应该最多赋值一次。

In the current implementation of ruby, reassignment of a constant generates a warning but not an error (the non-ANSI version of eval.rb does not report the warning):

Ruby的当前实现中,重新给一个常量赋值将产生一个警告,而不是一个错误(非ansi版本的eval.rb不报告警告):

  1. ruby>fluid=30
  2. 30
  3. ruby>fluid=31
  4. 31
  5. ruby>Solid=32
  6. 32
  7. ruby>Solid=33
  8. (eval):1: warning: already initialized constant Solid
  9. 33

Constants may be defined within classes, but unlike instance variables, they are accessible outside the class.

常量可能在类中被定义,但是不同于实例变量,它们可以在类外部被访问。

  1. ruby> class ConstClass
  2. | C1=101
  3. | C2=102
  4. | C3=103
  5. | def show
  6. | puts "#{C1} #{C2} #{C3}"
  7. | end
  8. | end
  9. nil
  10. ruby> C1
  11. ERR: (eval):1: uninitialized constant C1
  12. ruby> ConstClass::C1
  13. 101
  14. ruby> ConstClass.new.show
  15. 101 102 103
  16. nil

Constants can also be defined in modules.

常量同样可以在模块中被定义。

  1. ruby> module ConstModule
  2. | C1=101
  3. | C2=102
  4. | C3=103
  5. | def showConstants
  6. | puts "#{C1} #{C2} #{C3}"
  7. | end
  8. | end
  9. nil
  10. ruby> C1
  11. ERR: (eval):1: uninitialized constant C1
  12. ruby> include ConstModule
  13. Object
  14. ruby> C1
  15. 101
  16. ruby> showConstants
  17. 101 102 103
  18. nil
  19. ruby> C1=99 # 这不是一个好主意
  20. 99
  21. ruby> C1
  22. 99
  23. ruby> ConstModule::C1
  24. 101
  25. ruby> ConstModule::C1=99 # 更早的版本中不允许这样做
  26. (eval):1: warning: already initialized constant C1
  27. 99
  28. ruby> ConstModule::C1 # "enough rope to shoot yourself in the foot"
  29. 99

上一章 局部变量
下一章 异常处理:rescue