pharo - Pharo Smalltalk 中如何实现二进制消息的优先级?

标签 pharo

我正在查看 Pharo Smalltalk 的语法,并且想知道如何实现二进制消息的优先级。

如何声明这样的二进制消息?

系统如何确定一元消息的优先级?

最佳答案

用于实现二进制消息:

是的,例如,您可以查看数字类。它有很多二进制消息。或者考虑Object的这个方法:

-> anObject
    ^ Association basicNew key: self value: anObject

这允许您评估 'five' -> 5 并获得关联。

对于优先级:

这是由解析器完成的。所以首先它会查找关键字消息,然后是二进制,然后是一元,然后是双亲。

如果你有

collection add: 'five' -> 5

解析器将首先解析 add: 与接收器 collection 然后解析 'five' -> 5 并将其放入一个参数添加:。通过这种方式,AST 的组合方式使关键字消息更通用,并且将在计算出它们的属性后执行

在哪里可以找到

在最新版本的 Pharo 中,解析是使用 RBParser 完成的(与之前用于重构的解析器相同)。关键字消息用 parseKeywordMessage 解析,二进制用 parseBinaryMessage 解析。探索的简单方法是在 parseBinaryMessage 上放置一个一次性断点并执行类似

RBParser parseExpression: 'coll add: #five -> 5'

调试器将在 parseBinaryMessage 处停止,因此您可以查看堆栈并了解它是如何工作的。注意,break一次很重要,否则每次编译一个方法等等都会得到一个调试器。

关于pharo - Pharo Smalltalk 中如何实现二进制消息的优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41585281/

相关文章:

pharo - 在 Pharo 中加载给定日期的包版本

smalltalk - 需要有关 Pharo 中的 UserInterface Creator 的信息

smalltalk - 在 Smalltalk (Pharo) 中调整图像文件 (JPEG) 的大小

smalltalk - FileSystem磁盘方法在哪里?

smalltalk - Smalltalk 中 Symbol 的 "best practice"可移植方式是什么?

smalltalk - 使用 ZnUrl 在 URL 的最后部分添加路径段

startup - 添加要在 Pharo Image 启动时运行的内容

video-capture - 海边smalltalk中的视频捕捉

smalltalk - Pharo Smalltalk - 如何检查消息是否符合在另一个对象的类中定义的协议(protocol)?

version-control - 推出了新的 Pharo 版本。我如何处理我的旧图像?