有兩種方法:
- 執行 Banshee 時,加上 –run-scripts your_boo_scripts.boo 表示要執行指定的 boo script
- 將 boo script 檔案放在 ~/.config/banshee-1/boo-scripts/
如果你會 Boo 的話,基本上就不難幫 Banshee 增加功能。不過難就難在你必須要對 Banshee 的原始碼有一定程度的了解…除了看原始碼以外,也可以看看官方提供的 extension 怎麼寫…
Just thinking more…
Generator 函式其實就跟 C# 的 Iterator 一樣,利用 yield 關鍵字先把值傳回讓呼叫者使用。
使用 Generator/Iterator 最大的好處是可以讓函式只做必要的邏輯,而不需要把一些事情綁在迴圈裡面。
下面就是一個很標準的尋訪目錄樹的範例,尋訪的工作交給 walk,主程式則負責依據傳回的值作處理。
import System
import System.IO
def walk( path as string ):
di = DirectoryInfo( path )
for d in di.GetDirectories():
yield d as FileSystemInfo
for f in di.GetFiles():
yield f as FileSystemInfo
for node in walk( "." ):
if node isa DirectoryInfo:
print "[${node.Name}]"
elif node isa FileInfo:
print node.Name
參考自:Generators
p.s. 這系列文章一定會持續寫到 macro 出現為止。
公司福委會發了兩張免費電影票,該去看什麼片呢?或是送給老婆的妹妹?
主要是紀錄以前不知道或是看過沒深入了解的一些東西:
int i=1; object obj = i; // boxing int j = (int)obj; // unboxing
mono -O=all --aot your-assembly
來替代的樣子。
拜讀了Jserv大的”以 C 語言實做 Functional Language 的 Currying”與Thinker大的”真 C 語言實做 Functional Language 的 Currying”以後,決定也來挖掘一下 Boo 的 currying 寫法,根據這篇文章:Boo Programming Language Languages Currying Def Return World,程式碼出乎意料的簡單:
[python]
//Currying:
plusX = { a as int | return { b as int | return a + b }}
print plusX(3)(4)
[/python]
就這樣。老實說,大概懂了,可是又不是很懂,也沒想到用途。
所以,就跟沒懂是一樣的。
中東的女子莫名其妙地就受到很多束縛,焦糖人生裡的Nisrine為了結婚,還跑去作處女膜重建手術。在台灣早期的年代,也有同樣的事情,只是當時無法作處女膜重建手術,而以偷偷滴血的方式來掩護。這些事情從現在的角度來看,真的是覺得不可思議。
例外處理的語法與 Python 相近,差別在於 Boo 使用 ensure,而 Python 使用 finally。
除此之外,Boo 統一使用 except 處理各種例外,而 Python 使用 else 處理無法處理的例外型態。
[python]
import System
class MyException(Exception):
_msg as string
def constructor( s as string ):
_msg = s
override def ToString() as string:
return “MyException::${_msg}”
// 試著調整這兩個變數試試看
isExceptionHappen = false
isMyExceptionHappen = true
try:
// .. do something …
if isExceptionHappen:
raise Exception(“Something wrong.”) // 提出例外情況
// …
if isMyExceptionHappen:
raise MyException(“Hey!!”)
except e as MyException:
print e.ToString()
except e as Exception:
print e.Message
ensure:
print “不管有沒有錯誤,這裡都會被執行。”
[/python]
參考:Boo Primer – 例外、Python tutorial – 8. Errors and Exceptions
.NET上的語言幾乎都導入命名空間了,Boo 無法置身事外…
命名的方式,則是在原始檔第一行加上: namespace 命名空間名稱
撇開註解不算,命名空間的宣告,無論如何都要是程式碼的第一行,否則會有錯誤發生。
引用時,則是使用 import 關鍵字,例如:
import System Console.WriteLine( "Hello world!" ) // 為甚麼要引用命名空間?因為這樣寫很累... System.Console.WriteLine( "Hello again." )
你也可以指明組件(Assembly)的名稱,所以這幾種寫法也行:
import System.Data from System.Data import Gtk from "gtk-sharp"
對了,組件不需要特別加上 “.dll”
。飾演女主角媽媽的Kathy Bates也很棒。看完以後我在想,如果我的親人走了,我能夠輕易地擺脫傷痛嗎?
要衝 banshee 1.0 版的話,可以試試這個:
deb http://ppa.launchpad.net/banshee-team/ubuntu hardy main multiverse restricted universe
上星期(2008/6/5)已經釋出了 1.0.0 版,跟 0.13 比起來,速度可說是兔子與烏龜,主要原因是 1.0 在資料庫上做了適當的索引與調整。
目前 ubuntu 上的 mono 是 1.2.6,要試最新版,除了下載官方網站的 installer 來安裝與 Mono for Debian(Mono – General – Mono 1.9.1 and MonoDevelop 1.0 Packages for Debian Etch) 之外,只能試這個了:
deb http://ppa.launchpad.net/mono-edge/ubuntu hardy main multiverse restricted universe
http://ppa.launchpad.net 上還蠻多 repository 可以試試看的,有遇到沒打包的軟體,就進去找找,或許已經有人在實驗了。