我正在玩/向BlockClosure添加一些小东西。
要动态完成它(即不对原始块的不同数量的参数进行硬编码)我需要动态构造BlockClosures,以传递不同数量的参数。
有没有办法做到这一点,即使它涉及某种动态eval / compile?
答案 0 :(得分:4)
看看Vassili Bykov的这篇文章:
特别是我理解你的问题是关于不同数量的论点:
但是,由于Smalltalk块不支持等效的Lisp“rest”参数,因此curriedWithArguments:方法必须显式枚举和处理我们实际期望在块调用中使用的所有arities。使用CurriedBlock会产生一个更好的例子。
答案 1 :(得分:1)
以下是您要找的内容?在工作区中尝试:
|myBlock|
myBlock := Compiler evaluate: '[ 1 + 2 ]'.
现在您已经从字符串中编译了一个块:
myBlock class -> BlockClosure
并且可以评估它:
myBlock value -> 3