- 注册时间
- 2004-11-1
- 最后登录
- 2018-4-24
版主
  
- 积分
- 548
|
###函数
定义的方式等和python,ruby,boo差不多的样子。- def add(a:int, b:int):int
-     return a+b
- init
-     print "%d", add(45,55)
复制代码
对于函数的参数来说还有个问题,就是传递的是值还是引用。
可以在参数前加ref关键字来强制使用引用传递。- def change(x:int, ref y:int)
-     x = 100
-     y = 200
- init
-     var a = 1
-     var b = 2
-     
-     change(a,ref b)
-     print "a:%d\nb:%d", a, b
复制代码 可以看到,a的值还是一开始的1,而b的值就已经被改变了。
另外还有个out,用法和ref差不多,但是out引用的那个变量没有被初始化时,out会帮它初始化,而ref只会报错。- def fn(ref x:int)
-     x += 1
- init
-     z:int
-     fn(ref z)
-     print ("%d",z)
复制代码 这段用ref就是错误。改成out就可以了。- def fn(out x:int)
-     x += 1
- init
-     z:int
-     fn(out z)
-     print ("%d",z)
复制代码
###判断语句
if..do..
if..else..
if..else if..else..
简单点的时候,可以利用do写在一行里。- init
-     i:int = 3
-     if i < 3
-         print "i<3"
-     else if i == 3
-         print "i=3"
-     else
-         print "i<3"
-     
-     if i == 3 do print "i=3"
复制代码
case..when..default..
和c中的switch的用法是差不多的。可以把多个条件放在一个when里,是个有趣的功能。- init
-     i:int = 3
-     case i
-         when 0,1,2
-             print "i<3"
-         when 3
-             print "i=3"
-         default
-             print "i>3"
复制代码
###循环语句
for计数循环
有两种,递增和递减,也可以像if那样利用do写在一行中。
不能自己指定间隔的数值是个遗撼。- init
-     for i:int = 1 to 10 do print "%d", i
复制代码 从1开始(包含1)递增1到10(包含10)为止- init
-     for i:int = 10 downto 1
-         print "%d", i
复制代码 从10开始(包含10)递减1到1(包含1)为止
for..in..
for还可以用于对array,list,dict等类型进行递代器循环,就像c#,d语言的foreach那样。
当然do也还是可以用的。- init
-     var d = new dict of string,int
-     d.set("a",1)
-     d.set("b",2)
-     d.set("c",3)
-     for n in d.keys
-         print "%s:%d", n, d[n]
复制代码 不过0.7.9里,输出的排序有点错位,最后一个排到最前面了。应该是Bug吧。
while..
do..while..
循环,没什么好说的。 和break,continue一起说吧。
break是跳出循环。
continue是回到循环开始处- init
-     i:int = 0
-     while i < 10
-         i++
-         if i == 5 do break
-         if i == 3 do continue
-         print "%d", i
复制代码- init
-     i:int = 0
-     do
-         i++
-         if i == 5 do break
-         if i == 3 do continue
-         print "%d", i
-     while i < 10
复制代码
###错误处理
Genie是用的GLib中GError来处理可恢复运行时错误。
assert断言- init
-     i:int = 3
-     assert i == 3
复制代码 不管断言的内容是否为真,都可以完成编译。
如果为真,程序正常运行,如果为假,则程序运行时报错然后完蛋。
exception定义错误类型信息,与enum用法类似
raises 接在函数定义后面,调用函数时会引起什么类型的错误提示
raise 在适当的时侯抛出错误
try..except..finally..捕获处理错误- exception RPError
-     GOOD_PERSION_CARD
- def fn() raises RPError
-     raise new RPError.GOOD_PERSION_CARD("You are a good person!")
- init
-     try
-         fn()
-     except ex:RPError
-         print ex.message
-     finally
-         print "out!"
复制代码
简单的很快就看完了,后面就是难了。唉... |
|