小编Sea*_*ris的帖子

ScriptingBridge - “幕后”如何工作

上下文:我正在开发Pharo/Smalltalk -> Objective-C 桥

场景:在以下 Objective-C ScriptingBridge 片段中:

iTunesApplication *iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"];

iTunesTrack *currentTrack = iTunes.currentTrack; //[1]
// This low level way works too
//iTunesTrack *currentTrack = [iTunes propertyWithCode: 'pTrk']; //[2]

[iTunes playpause]; //[3]
Run Code Online (Sandbox Code Playgroud)

问题:桥用于class_getInstanceMethod确定对象是否理解消息/选择器,但对于脚本消息,如playpause

问题#1 为什么class_getInstanceMethod像这样的脚本消息会返回 NULL playpause?同样的问题class_copyMethodList?脚本消息有什么特别之处,它们的行为与其他 Obj-C 消息不同(除非它们这样做!)?

问题 #2 [已解决 - 请参阅@Matt 的回答]

根据文档,SB 在“iTunes 应用程序的动态定义子类”中放置了“自动处理 Apple 事件发送的应用程序特定方法”?并且,鉴于class_getInstanceMethod无法找到这种行为(见下文),桥接器测试它的可靠方法是什么(即是否存在这样的方法/消息)?

Objective-C 运行时 API 报告的结果好坏参半。一方面,该类iTunesApplication似乎没有任何方法(或与此相关的属性):

  • class_copyMethodList([iTunes class]...返回零的方法
  • class_getInstanceMethod桥接器用来查找和执行方法的 失败。

另一方面,#playpause …

smalltalk objective-c objective-c-runtime pharo scripting-bridge

4
推荐指数
1
解决办法
547
查看次数

Scheme&Smalltalk

关于Smalltalk和Scheme,这里不是一个真正的问题.3周前我才开始玩Smalltalk,并且在Squeak和Pharo之间蹦蹦跳跳.两者都令人惊讶,很难想到我,smalltalk并不是最流行的语言.一切都在一个图像中我不需要一个交互式命令提示一个编辑器一个用于Rdoc的网页等我只是点击它乱七八糟,如果我这样做UiDesigner Open.我得到一个接近QT4的GUI应用程序.我的小型数据库(如岩浆)有数据库实用程序.

无论如何,我也开始在Racket中使用Scheme,尽管有很多()涉及它仍然有很多简单性; 从开始看似乎是合乎逻辑的.我发现的唯一的事情就是有很多方案/ Lisp方言.球拍似乎也是一个相当容易的环境,然而,值得注意的是,似乎有鸡和麻省理工学院计划.

有没有什么特别的原因我应该使用Chicken over Racket或麻省理工学院?或相反亦然.良好的系统支持,数据库或GUI支持等.

PS我显然没有选择最流行的语言,但我很开心:-)

debugging scheme interpreter smalltalk pharo

3
推荐指数
1
解决办法
1254
查看次数