从字符串动态创建选择器

时间:2013-05-02 02:31:21

标签: oop selector smalltalk traits pharo

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

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

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

例如:

我需要这个

TCircle @ {#circleHash -> #hash}

但我生成了这个

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

您可以在#circleHash中看到引号。

因为是一个元程序,它也动态生成选择器。 如何在没有引号和#的情况下获取它?

我需要能够做这样的事情

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

并获取#SelectorDinamicallyGenerated,而不是'#SelectorDinamicallyGenerated'

我该怎么做?

我尝试过这样做(#obj)但它无效(获得#obj

2 个答案:

答案 0 :(得分:7)

我找到了它。

它' S

obj asSymbol

答案 1 :(得分:2)

你很好,你自己找到了。也许只是令人恼火的是,在smalltalk中,符号是一个选择器。只是不存在选择器类,你可以做“aString asSelector”。所以

'foo' asSymbol => #foo

会做的。如果你需要生成一个setter,你可以

'foo' asSymbol asMutator => #foo: