# Red/System语法
这里给出Red/System
的简要介绍,详细文档参考这里 (opens new window)
# 注释
a: 1 ;This is a comment
# Blocks块
block
在Rebol系中是一个很重要的语法现象,类似于lisp
中的括号。来看一个
例子:
if a > 0 [print "TRUE"]
依照我们的经验我们能知晓这条语句的功能,我们仔细分析一下:
if
关键词告诉我们它后面跟着的是一个判断语句和一个block,显然a > 0
是判断语句,[print "TRUE"]
是 if
语法需要的block
,而且block
中的内容在条件符合时得到执行。
是不是挺简单?
# 赋值语句
a: 1234
b: "bitbegin"
c: #"A"
很简单,不解释。
注意
:
后面有一个空格。
# 函数
foo: func [
a [integer!]
return: [integer!]
][
b: 10
a + b
]
print foo 5
那么Red
是怎么执行的呢?这个过程解释的有的麻烦,但是也是有规律的:语句一定是从左到右执行的。print
需要一个参数,取foo
是一个函数,foo
需要一个整形的参数,取5
是个整数,这时foo
得到执行返回15
, 15
作为参数传递给print
,print
输出15
。
# 类型
在上面的例子中我们见到了integer!
,它代表整型类型。Red/System支持的类型还有:
- integer!
- byte!
- float!
- float32!
- logic!
- c-string!
- struct!
- pointer!
# refinement
refinement
是一个很有意思的语法,在C
语系中对于结构体中的变量使用.
来访问,而在Rebol
系中使用/
访问。
s: declare struct! [
a [integer!]
b [c-string!]
c [struct! [d [integer!]]]
]
s/a: 123
s/b: "bitbegin"
相比C
语系的.
,refinement
有更多的作用。比如可以细化函数的功能,可以索引数组。
list: [123 456 789]
probe list/0 ;-- outputs 3
probe list/2 ;-- outputs 456
# 获取变量指针
Reb/System
有4中类型的变量可以使用:
获取变量的指针。
- integer!
- byte!
- float!
- float32!
Example:
s: declare pointer! [integer!]
a: 123
s: :a
print s/value ;-- will output 123
Ok, 基本的语法我们已经有了个印象,下面我们实际应用一下。