Crystal Crystal 程序结构

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

有木有想一起翻译 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

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

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

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

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