Crystal Crystal 程序结构

charleszhang · 2018年07月14日 · 最后由 ceclinux-github 回复于 2018年07月16日 · 7 次阅读

有木有想一起翻译Crystal官方文档的小伙伴😝 ,试着翻译了两篇,一个人动力不足😂,期待小伙伴们参与:https://github.com/chinazhangchao/crystal-book-zh_CN

Crystal 程序

Crystal 程序是一个全局对象,在里面可以定义类型、方法和文件局部变量。

# 在程序定义方法
def add(x, y)
  x + y
end

# 在程序调用add方法
add(1, 2) #=> 3

方法的返回值是最后一条表达式的值;无需显式使用 return 表达式。当然也可以使用 return

def even?(num)
  if num % 2 == 0
    return true
  end

  return false
end

当调用一个方法时,假如没有指定接收者,例如 add(1, 2),如果在当前类型或祖先链中没有找该方法,就会在全局程序中继续查找。

def add(x, y)
  x + y
end

class Foo
  def bar
    # 调用全局程序的 add 方法
    add(1, 2)

    # 调用 Foo 的 baz 方法
    baz(1, 2)
  end

  def baz(x, y)
    x * y
  end
end

如果要调用全局程序的方法,不管当前类型是否定义了一个同名方法,都可以使用前缀 ::

def baz(x, y)
  x + y
end

class Foo
  def bar
    baz(4, 2) #=> 2
    ::baz(4, 2) #=> 6
  end

  def baz(x, y)
    x - y
  end
end

全局声明的变量在方法内不可见:

x = 1

def add(y)
  x + y # error: undefined local variable or method 'x'
end

add(2)

方法调用时圆括号可以省略:

add 1, 2 # 等价于 add(1, 2)

主代码

主代码是编译运行程序时运行的代码,可以直接在源文件里写,无需放入 "main" 函数:

# 这是一个输出 "Hello Crystal!" 的程序
puts "Hello Crystal!"

主代码也可以在类型声明里:

# 这是一个输出 "Hello" 的程序
class Hello
  # 这里的 'self' 是 Hello 类
  puts self
end
共收到 4 条回复

对加功能不感兴趣,对提高编译速度感兴趣,希望每一个版本都能提高一些编译速度,而不是增加功能越来越臃肿。

好久没看到 Crystal 的帖子了 先无脑点赞再看

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册