使用来自Clojure的gem中提供的JRuby类

前端之家收集整理的这篇文章主要介绍了使用来自Clojure的gem中提供的JRuby类前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我是一个相当简单的需要在Clojure内使用 Ruby类.复杂的因素是该类是以宝石提供的.最佳方法是按照以下方式设置我的Leiningein项目文件
(project foo ""
  ...
  :dependencies [[clojure ...]
                 [jruby ...  ]])

同样,我更愿意将gem及其依赖项检查到本地repo目录中.因此,从我的理想用途就是:

(ns bar.baz
  (require [jruby.something :as jruby])

(def obj (jruby/CreateAnInstance "TheGemClass"))

(def result (jruby/CallAMethod obj "method_name" some args))

谢谢.

解决方法

以下是使用JRuby和Clojure获得 hello-world gem运行的几个步骤的简短列表和几个参考.实际上,这些步骤只是简要介绍了引用的材料如何组合起来(带有一些project.clj条目).第一个参考文献 Haml on Clojure Web App在Yoko Harada(@ yokolet的)博客上,使用了一种稍微不同的方式来调用JRuby,但是包括关于如何编写require(“…”)行的关键说明,用于JRuby和gems类路径.

>将[org.jruby / jruby-complete“1.6.7.2”]添加到您的依赖关系中,并让Leiningen获取依赖关系.
>在项目根目录中创建一个gems目录并将其添加到project.clj中的resource-paths这需要Leiningen 2.请参阅Leiningen source获取正确的格式.
>说

# see reference 4
GEM_HOME=gems GEM_PATH=gems java -jar ~/.m2/repository/org/jruby/jruby-complete/1.6.7.2/jruby-complete-1.6.7.2.jar -S gem install hello-world

在项目根.
>按上述设置GEM_HOME和GEM_PATH启动您选择的REPL服务. (我用lein2 swank测试了)
>在REPL说下面的内容

;;; see reference 2,first snippet
(let [runtime (JavaEmbedUtils/initialize (list))
      evaler  (JavaEmbedUtils/newRuntimeAdapter)]
  (doseq [ruby-expr ["require('rubygems')"
                     "require('gems/hello-world-1.2.0/lib/hello-world')"]]
    (.eval evaler runtime ruby-expr)))

看到零返回值,以及打印到终端的几行,REPL服务已经开始.

参考文献:

> Haml on Clojure Web App on Yoko Harada(@ yokolet’s)博客
Nick Sieger博客上的JRuby 1.1.6: Gems-in-a-jar
> DirectJRubyEmbedding在JRuby Wiki项目Kenai
> consuming gems from jruby-complete在这里SO(注意评论)

原文链接:https://www.f2er.com/ruby/266479.html

猜你在找的Ruby相关文章