トップ «前の日記(2007-09-14) 最新 次の日記(2007-09-16)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2007-09-15

_ rjb-1.0.7

rjb project page

Rjb::primitive_conversionというモジュールの擬似属性を追加。

Rjb::primitive_conversion = true を実行すると、以降、プリミティブ型クラスのオブジェクトが戻された場合、Rubyのネイティブ型に変換します。

_ rjb-1.0.8

rjb project page

ぐわ、java.lang.Longを忘れてた。御指摘感謝

本日のツッコミ(全9件) [ツッコミを入れる]
_ hfu (2007-09-15 02:41)

感激です。これから対応・速度評価・追いかけなどしてみようと思います。ありがとうございます。

_ hfu (2007-09-15 14:42)

geotools.rb, Rjb 1.0.7 に対応してみました。<br>java.lang.Long への対応に不具合があるようです。<br>http://d.hatena.ne.jp/hfu/20070916/11898343

_ hfu (2007-09-15 14:45)

すみません、上記リンク、何かおかしいようです;<br>http://d.hatena.ne.jp/hfu/20070916/<br>でお願いします。

_ arton (2007-09-15 18:54)

ごめんなさい。testも含めてLongのことは完全に忘れてました。<br>rjb-1.0.8をリリースしたので試していただけますか?

_ hfu (2007-09-17 04:46)

rjb-1.0.8、ありがとうございます。試したところ、動作良好です。私のプログラムについては、パフォーマンスも JRuby と比較して 18% 程度良くなっています。<br>http://d.hatena.ne.jp/hfu/20070917

_ hfu (2007-09-21 18:14)

間が開いてしまったのですが、primitive_conversion = true モードの Rjb と異なり、JRuby では(プリミティブ型クラスに加えて) java.lang.String も Ruby::String に自動変換されるようです。JRuby との互換性を確保使用とした場合には、String の Ruby::String への自動型変換も同様に行えるようにしたほうが良いかもしれません。string_conversion = true?

_ arton (2007-09-21 21:39)

RjbもJavaのStringを利用しているのは明示的にnewで作成した場合だけで、メソッドの返り値の場合はRubyのStringに変換してると思いますが、どういう場合でしょうか?

_ hfu (2007-09-22 00:20)

ヒントをありがとうございます。調べてみると、Java 側のメソッドで戻り値の型が java.lang.Object になっている場合には、 java.lang.String のオブジェクトがそのまま、 Ruby の String に変換されることなく返却されることが分かりました。<br><br>例えば、下記のプログラム:<br>----<br>begin<br> require 'java'<br> include_class('java.util.ArrayList')<br> l = ArrayList.new<br> l.add('string')<br> p l.get(0).class<br>rescue LoadError<br> require 'rjb'<br> ArrayList = Rjb::import('java.util.ArrayList')<br> l = ArrayList.new<br> l.add('string')<br> p l.get(0).getClass.getName<br>end<br>----<br>に対して、<br>----<br>$ jruby list_test.rb <br>String<br>$ ruby list_test.rb <br>"java.lang.String"<br>----<br>ということで、(どちらが良いかは別にして、)Rjb と JRuby の間で型変換の相違が発生しています。<br>じゃあ Date はどうなんだ・どうしてなんだ、などと疑問が湧いたりもしますが、取り急ぎ相違発生ケースを報告いたします。<br># 返却値型が CharSequence の場合も似たような相違が発生するかもしれないと思いました(が、これについては裏を取っていません...)。

_ arton (2007-09-22 08:50)

あ、なるほど。了解しました。修正してみます。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|

ジェズイットを見習え