2013-05-02 34 views
4

我製作了一個使用反射動態添加Traits的程序,並以一種預先確定的方式自動解決衝突。從字符串動態創建選擇器

它使用別名。它正在工作(我認爲),但最後添加特質時我只有一個問題。

我的程序爲每個衝突的方法生成所有別名,並將它們與特性一起添加到類中。問題是,我無法正確生成選擇器,而是生成一個字符串。

例如:

我需要這個

TCircle @ {#circleHash -> #hash} 

但我生成這個

TCircle @ {'#circleHash' -> #hash} 

你可以看到在#circleHash引號。

因爲是一個元程序,它也動態地生成選擇器。 我怎樣才能得到它不帶引號,並與#

我需要能夠做這樣的事

"have the selector name in string" 
obj := 'SelectorDinamicallyGenerated'. 
^(#obj) 

,並得到#SelectorDinamicallyGenerated,而不是'#SelectorDinamicallyGenerated'

我該怎麼做?

我試着做這樣的(#obj),但它不工作(獲得#obj

回答

7

我發現它。

這是

obj asSymbol 
+0

這是正確的。還要注意的是'#something'是一樣的爲'#'something'' – Tobias 2013-05-02 04:32:59

+0

是的,但是當我把它添加到別名收集它與爆炸' – 2013-05-02 13:02:03

+0

怎麼回事? '#something ==#'something''他們是完全相同.. – Tobias 2013-05-02 13:32:03

2

好你自己發現了它。也許這僅僅是一個令人討厭的事情,一個符號是一個選擇器。只是不是有一個選擇器類,你可以做「aString asSelector」。所以

'foo' asSymbol => #foo 

會做。如果你需要產生一個setter你可以做

'foo' asSymbol asMutator => #foo: 
+1

嚴格地說,選擇可以是任何物體,這只是它限制了符號,你可以只嘗試了IDE:真正的說:(目標methodDictionary在:#asString)在 \t對象methodDictionary。 \t ^浮動PI執行:真 – 2013-05-02 20:01:17