Boo 的變數宣告方法很簡單,就跟大多數的 script 語言一樣,指定即用。
比較特別的地方有三個:
- 在第一次指定以後,該變數型別就確定了,之後若指定其他型別的值給它,會發生錯誤。這邊的行為跟 Python、Ruby、Javascript等 script 語言不同,要特別注意。這也證明了 Boo 具有靜態語言的特性。
- 字串裡可以用 ${var_name} 的方式,會直接把 var_name 的值放到變數裡面去。
- 字串有三種定義方法:
- 雙引號,如”Hello”
- 單引號:跟雙引號的不同處,在於單引號字串不解釋 ${},所以 print ‘${var}’ 會印出 ${var},而不是 var 變數的值。
- 三個雙引號,如 “””Hello”””,跟前兩者的差別在於可以跨越多行。這跟 python 一樣。
// var.boo i = 100 s = "Hello world ${i} times!!" print s // 如果把 100 指派給 s,就會發生錯誤 // s = 100 // Boo Primer 說可以像下面這樣寫,但經過我試驗,是不行的。 // s as int = 200 // 但這樣寫,卻是可以的 o as object = 300 print o o = "I am object" print o print """Hello Line1 Line2 Line3"""
Boo 官方建議不要特別花心思去寫 <variable> as <type> = <value> 這樣的語法,盡量使用 <variable> = <value>。
經過編譯(booc -target:exe var.boo)以後,再用 reflector 去反組譯,產出的C#代碼如下:
private static void Main(string[] argv) { int num = 100; Console.WriteLine(new StringBuilder("Hello world ").Append(num).Append(" times!!").ToString()); object obj2 = 300; Console.WriteLine(obj2); obj2 = "I am object"; Console.WriteLine(obj2); Console.WriteLine("Hello\r\nLine1\r\nLine2\r\nLine3"); }
從反組譯出來的結果看來,Boo都幫你自動處理好了,的確是不用特別花心思去寫。