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