3
我有一個重複的一組樣板代碼,看起來像這樣:朱莉婭:建築符號表達式
type Object
ptr::Ptr{Void}
function Object()
ptr = ccall((:createObject, LIB_SMILE), Ptr{Void},())
smart_p = new(ptr)
finalizer(smart_p, obj -> ccall((:freeObject, LIB_SMILE), Void, (Ptr{Void},), obj.ptr))
smart_p
end
end
我想自動生成一組這些類型定義的:
for str = ("Obj1","Obj2","Obj3")
op_fname = symbol(str)
op_create = ???
op_free = ???
@eval begin
type $op_fname
ptr::Ptr{Void}
function ($fname)()
ptr = ccall(($op_create, LIB_SMILE), Ptr{Void},())
smart_p = new(ptr)
finalizer(smart_p, obj -> ccall(($op_free, LIB_SMILE), Void, (Ptr{Void},), obj.ptr))
smart_p
end
end
end
end
我還沒有想出如何爲op_create和op_free生成正確的「符號符號」。如在,我需要op_create = :(:createObj)
,但我不能複製這個。有沒有辦法在這種情況下生成所需的符號?
謝謝。
不錯!有趣的是'QuoteNode'在Julia文檔中不存在 – Mageek 2014-10-16 21:31:50
我碰到它正在玩表達式:'typeof(:(a + b +:c).args [4])'給出'QuoteNode'。這與我所掌握的信息一樣多。 – Gray 2014-10-16 21:34:15
更好的方法是使用''Meta.quot''來替代''QuoteNode'',這是一個Julia內部。 – mlubin 2014-10-17 19:40:21