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