4

我制作了一个程序,它使用反射来动态添加特征,并以一种预先确定的方式自动解决冲突。

它使用别名。它正在工作(我认为),但最终添加特征时我只有一个问题。

我的程序为每个冲突的方法生成所有别名,并将它们与特征一起添加到类中。问题是我无法正确生成选择器,而是生成一个字符串。

例如:

我需要这个

TCircle @ {#circleHash -> #hash}

但我正在生成这个

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

您可以在 中看到引号#circleHash

因为是一个元程序,它也动态生成选择器。没有引号和#?

我需要能够做这样的事情

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

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

我怎样才能做到这一点?

我试过这样做(#obj)但它不工作(得到#obj

4

2 回答 2

7

我已经找到了。

它是

obj asSymbol
于 2013-05-02T02:53:19.250 回答
2

好在你自己找到了。也许在 smalltalk 中,符号是一个选择器,这很烦人。只是没有选择器类,您可以执行“aString asSelector”。所以

'foo' asSymbol => #foo

会做。如果您需要生成一个设置器,您可以这样做

'foo' asSymbol asMutator => #foo: 
于 2013-05-02T11:52:09.807 回答