跳至內容

常數

常數可以在最上層或在其他型別內宣告。它們必須以大寫字母開頭。

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