小编Nic*_*ain的帖子

是否可以在Clojure中创建循环引用?

忽略本机互操作和瞬态,是否可以在Clojure中创建包含直接循环引用的任何数据结构?

似乎不可变数据结构只能包含对其自身先前版本的引用.是否有任何Clojure API可以创建一个引用自身的新数据结构?

Scheme具有letrec形式,允许创建相互递归的结构 - 但据我所知,Clojure没有任何类似的东西.

这个问题与将Clojure移植到iOS有关 - 它没有垃圾收集,但确实有引用计数.

clojure circular-reference

22
推荐指数
2
解决办法
1664
查看次数

Ruby和Javascript之间的关键语义差异是什么

如果要在Javascript引擎之上实现Ruby(在浏览器中或在独立的V8或Spidermonkey之上),那么Ruby和JS对象模型之间的关键阻抗不匹配是什么?

javascript ruby programming-languages v8 spidermonkey

12
推荐指数
1
解决办法
1259
查看次数

Racket Objective-C FFI - 避免重新定义课程

我正在使用Racket Objective-C FFI在应用程序中嵌入WebKit WebView.

为了接收页面加载通知,我在Racket中创建了一个新的ObjC类,它被设置为web-view的帧加载委托.

该类看起来像:

(define-objc-class MyWebFrameLoadDelegate NSObject
  []
  (- _void (webView: [_id wv] didFinishLoadForFrame: [_id wf])
    (send frame set-status-text "Page Loaded")))
Run Code Online (Sandbox Code Playgroud)

在DrRacket中运行代码时,它第一次运行良好.进一步的迭代会导致进程死亡:

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000020
...
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   libobjc.A.dylib                 0x00007fff8511e299 objc_registerClassPair + 63
1   Racket                          0x00000001002d329c ffi_call_unix64 + 76
2   Racket                          0x00000001002d3eb4 ffi_call + 644
3   Racket                          0x00000001002c612f ffi_do_call + 1599
4   ???                             0x00000001004b50cc 0 + 4299903180
...
Run Code Online (Sandbox Code Playgroud)

...这似乎表明它是ObjC类的重新定义的原因.

是否有一种干净的方式使用FFI或更一般的Racket功能,以避免重新定义类(如果它已经存在)?

我尝试define-objc-class用条件包装,但它需要是一个顶级形式.

我可以下载到原始的ObjC运行时函数并动态定义委托类 - 但是避免这样做会很好.


解决方案 …

racket

6
推荐指数
1
解决办法
242
查看次数