3

我正在玩向 BlockClosure 添加一些柯里化的东西。

要动态完成它(即,不对原始块的不同数量参数的所有情况进行硬编码),我需要动态构造 BlockClosures,以便传递不同数量的参数。

有没有办法做到这一点,即使它涉及某种动态评估/编译?

4

2 回答 2

4

看看 Vassili Bykov 的这篇文章:

特别是据我了解,您的问题是关于不同数量的论点:

然而,由于 Smalltalk 块不支持等效的 Lisp“rest”参数,curriedWithArguments: 方法必须显式枚举和处理我们实际期望在块调用中使用的所有参数。相反,使用 CurriedBlock 会产生一个更好的示例。

于 2013-09-03T23:04:06.500 回答
2

以下是您要查找的内容吗?在工作区中尝试:

|myBlock|
myBlock := Compiler evaluate: '[ 1 + 2 ]'.

现在你已经从一个字符串编译了一个块:

myBlock class -> BlockClosure

并可以评估它:

myBlock value -> 3
于 2013-09-28T14:25:26.477 回答