gpt4 book ai didi

arguments - block 的内部是否可以知道它接收到的选择器并据此评估自己?

转载 作者:行者123 更新时间:2023-12-03 08:17:38 25 4
gpt4 key购买 nike

假设我们在代码中的某处有一个 block ,我们将它分配给一个变量(实例或本地),如下所示。

someName := [ anInstanceVariable doThis. anotherInstanceVariable doThat.] 

从外部我想这样使用它:

someName someMessageTheBlockDoesntImplement: argument.

block 是否可以作用于特定选择器 someName 并让 anInstanceVariableanotherInstanceVariable 执行它并分别返回这些对象?

附言。它将充当某种转发器。

最佳答案

所有 Smalltalk 方言都允许通过某种方式访问​​当前上下文。在 VisualWorks 和 Pharo 中,您使用#thisContext。因此,如果您有类似...的方法

Object>>someMethod
^[thisContext sender inspect] value

...send evaluate: 'abc' someMethod ... 你会得到一个MethodContext --> ByteString(Object)>>someMethod

或者……

Object>>someMethod: aBlock
^aBlock value

'abc' someMethod: [thisContext sender inspect]

--> 字节串(对象)>>一些方法:

如果你需要查看更多的堆栈,你可以使用像...

| context frames | 
context := thisContext.
frames := OrderedCollection new.
[context isNil or: [context stack isNil]] whileFalse: [
frames add: context.
context := context sender].
^frames

在 VA Smalltalk 中,您可以编写...

someMethod
^[Processor activeProcess currentFrame context inspect] value

...a BlockContextTemplate --> [] in Object>>#someMethod

查看调试器代码是了解您可以使用哪些其他技术的好方法。

关于arguments - block 的内部是否可以知道它接收到的选择器并据此评估自己?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32653864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com