zoukankan      html  css  js  c++  java
  • JRuby使用经验 Ruby language ITeye论坛

    JRuby使用经验 - Ruby - language - ITeye论坛

    JRuby使用经验 - Ruby - language - ITeye论坛

    首先我是一个Java程序员,很喜欢Ruby.


    公司由于业务的需要,在Java项目中引入动态语言,目的是可以快速地修改业务逻辑以响应快速变化的业务需求.于是我有幸当了一回JRuby的先锋.当初使用JRuby的时候,我对JRuby项目的了解其实就是知道它可以让Ruby运行在JVM上面,其余细节一概不知,都是在实际使用中一点点地摸索,一点点地积累回来.

    在这一过程中,在 dennis_zane
    同学身上,我学到了很多与Ruby相关或者不相关的东西,借机感谢一下.


    JRuby的中文资料相当的稀少,在 Google上搜索,来来去去的就是介绍了下最基本的怎么从Java中调用Ruby代码,或者在Ruby中使用Java的类库.我从无数次遇到问题 => 解决问题的循环中也有那么一点点的使用心得,记录之,备忘.


        * JRuby的入门资料,请访问 JRuby wiki 一般的使用方法这里都有介绍.

        * 有两种方法可以使用JRuby,一是用BSF,二是使用JDK 6.BSF的方式已经过时了,JDK6中内置了对脚本语言的支持,默认的Javascript,要使用JRuby还要下载juby-engine.jar,当前最新版本是1.1.6 地址: https://scripting.dev.java.net/files/documents/4957/115972/jruby-engine-1.1.6.zip



    =======================================华丽的分割线========================================

    如果使用jar打包,在ruby代码中调用java的类

    1. require "your_jar_file_name.jar"  
    2. import your_packet_name  




    java 方法:

    1. class JavaClazz {  
    2.     public void javaMethod(int i) {  
    3.         System.out.pintln(i);  
    4.     }  
    5. }  



    在Ruby中如是调用:

    1. java_clazz = JavaClazz.new  
    2. java_clazz.javaMethod(1)  



    将会抛出类型不匹配的异常,因为所有ruby中的数值,传递到java那里都是 Long 类型,解决办法如下:

    1. java_clazz = JavaClazz.new  
    2. java_clazz.javaMethod(java.lang.Integer.new(1))  

    注:以上代码是运行在 JRuby 1.1.2 版本下,在最新版本 1.2.0中已经没有这个问题了, 多谢 RednaxelaFX 同学的指正.

    =======================================华丽的分割线========================================

    如果在java中使用了可变参数:

    1. class JavaClazz {  
    2.     public void javaMethod(int i,String... s) {  
    3.         ...   
    4.     }  
    5. }  



    在ruby中应该这样调用:

    1. java_clazz = JavaClazz.new  
    2. java_clazz.javaMethod(java.lang.Integer.new(1),'this is a string')  
    3. // 只有一个参数,如果你知道java中的可变参数其实是一个数组的话  
    4.  java_clazz.javaMethod(java.lang.Integer.new(1),[].to_java(java.lang.String))  

    =======================================华丽的分割线========================================


    调用java中的常量,枚举enum

    1. class JavaClazz {  
    2.     public final String CONSTANT = "I can not change!"  
    3.     public enum Season { winter, spring, summer, fall }  
    4. }  
    1. puts JavaClazz::CONSTANT  
    2. puts JavaClazz::Season.winter  



    =======================================华丽

  • 相关阅读:
    oracle增加字段,循环
    mybatis批量插入和更新
    oracle触发器
    Java中<? extends T>和<? super T>的理解
    函数式编程
    mybaitis
    操作word
    服务大厅流程
    jdk动态代理
    操作系统
  • 原文地址:https://www.cnblogs.com/lexus/p/2397217.html
Copyright © 2011-2022 走看看