Spec-Zone.ru › Crystal

Константы

Константы можно объявлять на верхнем уровне или внутри других типов. Они должны начинаться с заглавной буквы:

PI = 3.14

module Earth
  RADIUS = 6_371_000
end

PI            # => 3.14
Earth::RADIUS # => 6_371_000

Хотя компилятор этого не требует, константы обычно именуют заглавными буквами, разделяя слова символами подчёркивания.

Определение константы может вызывать методы и содержать сложную логику:

TEN = begin
  a = 0
  while a < 10
    a += 1
  end
  a
end

TEN # => 10

Псевдоконстанты

В Crystal предусмотрено несколько псевдоконстант, которые предоставляют отражённые данные об исполняемом исходном коде.

__LINE__ — это номер текущей строки в выполняемом в данный момент файле Crystal. Если __LINE__ используется в качестве значения параметра по умолчанию, оно обозначает номер строки в месте вызова метода.

__END_LINE__ — это номер строки end вызывающего блока. Можно использовать только в качестве значения параметра по умолчанию.

__FILE__ содержит полный путь к выполняемому в данный момент файлу Crystal.

__DIR__ содержит полный путь к каталогу, в котором находится выполняемый в данный момент файл Crystal.

# Assuming this example code is saved at: /crystal_code/pseudo_constants.cr
#
def pseudo_constants(caller_line = __LINE__, end_of_caller = __END_LINE__)
  puts "Called from line number: #{caller_line}"
  puts "Currently at line number: #{__LINE__}"
  puts "End of caller block is at: #{end_of_caller}"
  puts "File path is: #{__FILE__}"
  puts "Directory file is in: #{__DIR__}"
end

begin
  pseudo_constants
end

# Program prints:
# Called from line number: 13
# Currently at line number: 5
# End of caller block is at: 14
# File path is: /crystal_code/pseudo_constants.cr
# Directory file is in: /crystal_code

Динамическое присваивание

Динамическое присваивание значений константам с помощью цепочного присваивания или множественного присваивания не поддерживается и приводит к синтаксической ошибке.

ONE, TWO, THREE = 1, 2, 3 # Syntax error: Multiple assignment is not allowed for constants

To the extent possible under law, the persons who contributed to this workhave waived
all copyright and related or neighboring rights to this workby associating CC0 with it.
https://crystal-lang.org/reference/1.2/syntax_and_semantics/constants.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API