星期三, 4月 23, 2008

[Boo]Boo(6)-變數

Boo 的變數宣告方法很簡單,就跟大多數的 script 語言一樣,指定即用。
比較特別的地方有三個:
  • 在第一次指定以後,該變數型別就確定了,之後若指定其他型別的值給它,會發生錯誤。這邊的行為跟 Python、Ruby、Javascript等 script 語言不同,要特別注意。這也證明了 Boo 具有靜態語言的特性。
  • 字串裡可以用 ${var_name} 的方式,會直接把 var_name 的值放到變數裡面去。
  • 字串有三種定義方法:
    1. 雙引號,如"Hello"
    2. 單引號:跟雙引號的不同處,在於單引號字串不解釋 ${},所以 print '${var}' 會印出 ${var},而不是 var 變數的值。
    3. 三個雙引號,如 """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都幫你自動處理好了,的確是不用特別花心思去寫。

沒有留言: