程序¶
程序是编译器处理的全部源代码。源代码被解析并编译成程序的可执行版本。
程序的源代码必须使用 UTF-8 编码。
顶层作用域¶
在任何其他命名空间之外定义的类型、常量、宏和方法等功能都在顶层作用域内。
# Defines a method in the top-level scope
def add(x, y)
x + y
end
# Invokes the add method on the top-level scope
add(1, 2) # => 3
顶层作用域内的局部变量是文件局部变量,在方法体内不可见。
x = 1
def add(y)
x + y # error: undefined local variable or method 'x'
end
add(2)
私有功能也只在当前文件中可见。
双冒号前缀 (::
) 用于明确地引用顶层作用域内的命名空间、常量、方法或宏
def baz
puts "::baz"
end
CONST = "::CONST"
module A
def self.baz
puts "A.baz"
end
# Without prefix, resolves to the method in the local scope
baz
# With :: prefix, resolves to the method in the top-level scope
::baz
CONST = "A::Const"
p! CONST # => "A::CONST"
p! ::CONST # => "::CONST"
end
主代码¶
任何既不是方法、宏、常量或类型定义,也不是在方法或宏体内定义的表达式,都是主代码的一部分。主代码在程序启动时按照源文件包含顺序执行。
不需要使用特殊入口点来运行主代码(例如 main
方法)。
# This is a program that prints "Hello Crystal!"
puts "Hello Crystal!"
主代码也可以在命名空间内。
# This is a program that prints "Hello"
class Hello
# 'self' here is the Hello class
puts self
end