常數¶
常數可以在最上層或在其他型別內宣告。它們必須以大寫字母開頭。
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