您可以将函数存储在变量中吗?

阿维夫·科恩(Aviv Cohn)

我目前正在研究Smalltalk。

有什么方法可以在变量内存储函数或方法?

例如,在Python中可以说:

x = someobject.method
x() # calling it

在Smalltalk中这可能吗?something.method自身作为参数传递给另一种方法呢?

安德烈·奇斯(Andrei Chis)

您可以通过向类对象询问具有给定名称的方法来获得方法对象。下面>>是一条以Object方法名称作为参数发送到类的消息

Object >> #asString

这将返回type的实例CompiledMethod这是表示方法的对象。像任何对象一样,您可以将其存储在变量中。

copyMethod := Object>>#asString.

例如,如果您在Pharo a Playground中打开并查看上面的代码,您将获得:

在操场上执行代码

然后,您可以使用消息执行该方法#valueWithReceiver:arguments:这需要接收者(自身/本)和可能的参数作为参数。

result := copyMethod 
    valueWithReceiver: Object new arguments: #().

执行方法

但是,这是执行方法的底层方法。

我会说更常见的是直接在对象上执行具有给定名称的方法。可以使用perform:来完成perform:withArguments:您可以使用方法名称作为参数将其发送到对象

receiver := Object new.
receiver perform: #asString.

上面的代码执行asString在接收器对象上命名的方法这通常用于传递我们需要执行的方法的名称。不同之处在于的实例CompiledMethod是不可变的。如果更改该方法的代码,则会创建一个新实例,并且最终可以执行该方法的旧版本。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

您可以将单击的img存储为变量吗?

Godot和GDScript可以将函数存储在变量中吗?

斯威夫特:您可以将函数作为值存储在字典中吗?

您可以将jQuery函数的输出放在变量内吗?

您可以将LongLong存储在Variant中吗?

您可以在if子句中存储变量吗?

您可以将打印格式与C中的变量对齐吗?

您可以将变量传递给FXML中的Insets吗?

您可以在存储其他函数返回值的函数内部创建局部变量吗?

您可以重置一个变量来存储调用包含闭包的函数的结果吗?

您可以将变量名称传递给函数以对其进行编辑吗?

您可以循环输入()来存储多个变量吗?

您可以将发布计划中的工件存储在Visual Studio Team Services中吗?

您可以从函数,args和kwargs中确定如何分配变量吗?

您可以并且应该将表名称存储在表中吗?

您可以将启动操作/启动项目存储在project / sln文件中吗?

您可以将列表存储到 while 循环内的列表中吗?

Python:将值存储在变量中,以便您可以识别每次再次出现

可以将 useState 的状态存储在变量中吗?

我可以将 jQuery 事件存储在变量中吗?

您可以将函数参数结构传递给函数吗?

您可以在C中使函数参数指向变量吗?

是否可以将函数及其参数存储在变量中?

是否可以将函数调用存储在动态变量中?

您可以在c中的函数的callong中调用函数吗

您可以将变量插值到模板中的{%include%}语句中吗?

您可以将变量组值传递到Yaml中的子模板吗?

您可以将列表索引设置为原始列表中的变量吗?

您可以将丰富数据类型的值分配给 Excel VBA 中的变量吗?