跳至内容

程序

程序是编译器处理的全部源代码。源代码被解析并编译成程序的可执行版本。

程序的源代码必须使用 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