Evgenii Legotckoi
25 августа 2016 г. 13:05

User Guide #23 - Ruby - Константы класса

Константа имеет имя, начинающееся с латинской буквы в верхнем регистре. Значение константе присваивается только один раз при инициализации. В текущей реализации 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

Константы могут быть определены внутри класса, но в отличие от переменных класса, они могут быть доступны извне.

  1. ruby> class ConstClass
  2. | C1=101
  3. | C2=102
  4. | C3=103
  5. | def show
  6. | print C1," ",C2," ",C3,"\n"
  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

Константы также могут быть определены в модулях.

  1. ruby> module ConstModule
  2. | C1=101
  3. | C2=102
  4. | C3=103
  5. | def showConstants
  6. | print C1," ",C2," ",C3,"\n"
  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 # not really a good idea
  20. 99
  21. ruby> C1
  22. 99
  23. ruby> ConstModule::C1 # the module's constant is undisturbed ...
  24. 101
  25. ruby> ConstModule::C1=99
  26. ERR: (eval):1: compile error
  27. (eval):1: parse error
  28. ConstModule::C1=99
  29. ^
  30. ruby> ConstModule::C1 # .. regardless of how we tamper with it.
  31. 101

Вам это нравится? Поделитесь в социальных сетях!

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь