BOO入门 > 巨集 (上一章:Generators 下一章: 鸭子类别型)


print Macro 编辑

print Macro 可以在萤幕上显示一个或多个物件。

呼叫 print Macro 的方法有两种:

  1. 一个引数
  2. 两个或多个引数
// print 範例
print "Hello there"
print "Hello", "there"

输出结果

Hello there
Hello there

在第二行你可以看到,除了最后一个引数以外,每印完一个引数,都会接著印出一个空白,然后继续。

所以,这两行其实有同样的结果。

assert Macro 编辑

assert Macro 会确认条件必须为真,否则的话,会提出 AssertionFailedException。

assert 可以接受一个或两个引数。第一个引数必须是 boolean 条件,第二个引数,不是必要但必须为字串,在条件为 false 时会被印出。

// assert 範例
assert true // 永遠通過
assert false, "message" // 永遠失敗

输出结果

Boo.Lang.Runtime.AssertionFailedException: message
   at Tutorial.Main(String[] argv)
  建议 不要用在不确定其值的条件式上。例如:assert iter.MoveNext() 就是一个不好的主意。

译注:一般 assert 都是在开发的时候,用来检查引数是否符合函数开发者的预设条件。

using Macro 编辑

using Macro 可以接受任何数目的引数。

主要用来确保在区块内的代码完成后,物件能尽快被释放掉。

宣告引数的形式有三种:

  1. <object>
  2. <object> = <expression>
  3. <expression>

这三种方法都会检查物件是否实作 IDisposable 介面,这样在代码结束后,才能呼叫指定物件的 IDisposable.Dispose 方法。

// using 範例
import System.IO

using w = StreamWriter("test.txt"):
    w.WriteLine("Hello there!")

这个例子会建立一个档案:test.txt,并进行写入。在 using 区块结束后尽快将档案关闭。

lock Macro 编辑

在多执行绪环境下,lock Macro 保证在同一时间其他的物件不会使用到指定的物件,以避免资料毁损。

lock 需要一个以上的引数,施行时,会将所有引数都 lock 住。

// lock 範例
lock database:
    database.Execute("""
        UPDATE messages
        SET
            id = id + 1""")

debug Macro 编辑

debug Macro 与 print 一样,差别在于 debug Macro 使用 System.Dianostics.Debug 输出,而 print Macro 使用 System.Console。

自订Macro 编辑

你可以参考这篇文章:Custom Macros