- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为我正在编写的 C++ 库编写一个 Ruby 接口(interface)。 C++ 库提供了几种基于比较函数的数据结构,例如 FibonacciHeap。使用 ruby 比较函数工作正常,即以下 Ruby 代码工作:
f = FibonacciHeap.new
f.push(24)
f.push(2)
f.push(89)
raise unless f.top == 2
但我想让用户能够提供自己的比较功能,例如像这样:
f = FibonacciHeap.new { |a, b| a.length <=> b.length }
f.push("asdf")
f.push("a")
f.push("adsfdsafdsaf")
raise unless f.top == "a"
但即使使用谷歌,我也没有找到如何在 Rice 中使用 block 。我发现的唯一一件事是如何从 C++ 迭代器定义 ruby each 方法,这当然需要一个 block 。我想一旦我存储了 proc 对象,这很容易,我只需使用适当的参数调用 ruby 方法“调用”它,但是我如何检查构造函数是否被赋予了一个 block ,如果是,存储阻塞到 proc 对象中?
如果我可以检查 block 接受的参数数量,那就更好了,但我不知道这是否可能,但用户可以在简单的情况下提供类似的东西
f = FibonacciHeap.new { |a| a.length }
如果他不需要提供 a <=> b
的完全灵 active 功能。
最佳答案
在 C 代码中,您可以调用:
rb_yield(value);
在Rice代码中,你可以使用:
Rice::protect(rb_yield, value);
(Rice::protect 确保正常的 C++ 异常行为)。
这就是 Rice::Module::define_iterator 屈服于 ruby 代码的方式。
关于c++ - 使用 Rice 从 C++ 调用 Ruby block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12496211/
我有以下目录布局 $ ls templates/ bar.html foo.html 我已经运行了以下命令 $ rice embed-go 我的代码看起来像 主要包 import ( "gi
我正在学习 http://rice.rubyforge.org/index.html 上的 ruby Rice 教程.我的最终目标是能够包装一个我已经在运行的 C++ 对象,但是从 Ruby 调用
有人用 Rails 4 试过 JasminRice gem 吗? 我有 Ember Rails 4 应用程序,我想使用 Jasmine Rice,但我不确定它是否会像他们的 Github 帐户上说的那
我正在为我正在编写的 C++ 库编写一个 Ruby 接口(interface)。 C++ 库提供了几种基于比较函数的数据结构,例如 FibonacciHeap。使用 ruby 比较函数工作正常,即
也许我看错了地方,但我找不到将 go.rice 与 http.ServeFile() 结合使用的示例。基本上,我想要的是使用 http.ServeFile() 提供盒装文件。我现在拥有的是以下内容。如
或者,也许,我没有得到的是 unary coding : 在 Golomb, or Rice, coding , 你拆分了一个号码 N将其除以另一个数字 M 分成两部分然后用一元编码该除法的整数结果,
我正在包装一个名为 essentia 的 C++ 库作为使用 rice-ruby 包装器的 ruby 扩展。 在这个库中,有两个纯虚类,叫做essentia::standard::Algorith
在为 Ruby 编写 C++ 扩展时,我一直在努力解决的一个问题是,即使用户做了愚蠢的事情,也要让它真正安全。那时他应该得到异常,但绝不是 SegFault。一个具体的问题如下:我的 C++ 类有一个
我有一个非常酷的 C++ 库,名为 libcage .我需要库中类的方法才能从 Ruby 脚本调用。 我正在使用 Rice 在 C++ 中构建 Ruby 扩展. cage 类中的join 方法使用参数
我是一名优秀的程序员,十分优秀!