我制作了一个程序,它使用反射动态添加Traits,并以预先确定的方式自动解决冲突。
它使用别名。它正在工作(我认为),但在最后添加特征时我只有一个问题。
我的程序为每个冲突方法生成所有别名,并将它们与特征一起添加到类中。问题是我无法正确生成选择器,而是生成一个字符串。
例如:
我需要这个
TCircle @ {#circleHash -> #hash}
但我生成了这个
TCircle @ {'#circleHash' -> #hash}
您可以在#circleHash
中看到引号。
因为是一个元程序,它也动态生成选择器。
如何在没有引号和#
的情况下获取它?
我需要能够做这样的事情
"have the selector name in string"
obj := 'SelectorDinamicallyGenerated'.
^(#obj)
并获取#SelectorDinamicallyGenerated
,而不是'#SelectorDinamicallyGenerated'
。
我该怎么做?
我尝试过这样做(#obj
)但它无效(获得#obj
)
答案 0 :(得分:7)
我找到了它。
它' S
obj asSymbol
答案 1 :(得分:2)
你很好,你自己找到了。也许只是令人恼火的是,在smalltalk中,符号是一个选择器。只是不存在选择器类,你可以做“aString asSelector”。所以
'foo' asSymbol => #foo
会做的。如果你需要生成一个setter,你可以
'foo' asSymbol asMutator => #foo: