Crystal Crystal 程序结构

charleszhang · 2018年07月14日 · 最后由 swordrong 回复于 2018年10月13日 · 795 次阅读

有木有想一起翻译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
共收到 5 条回复

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

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

以前没有用过Ruby,看了Crystal 后觉得很好,但命运和Ruby会不会一样呢?从语法上,我个人喜欢Ruby一点,Python 缩进的方式有时让人崩溃,但Python 人气指数很高。从RubyGems 来看,很多Gems使用没有完整的教程,只有安装指南。看Python的第三方包,好多都写成指南,写成书出版了,这就是Python能变成生产力,让用户能明明白白使用,Ruby没有做到,除Rails 之外。Crystal lang 会不会成为第二个Ruby呢?Ruby2.6 就有Jit了。

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