【問1】
P.183 の include_class にブロックを渡す例に誤りがあると思います。
include_class ["Date", "HashMap"].map {|e| "java.util." + e}
↑この例は、include_class にブロックを渡す機能の例にはなっていないです。
|
【回答1】
ご指摘いただきましたとおり、P182の下から5行目〜P183にかけて、説明内容に曖昧な点および一部誤りが含まれておりました。
この場をお借りしてお詫び申し上げるとともに、下記の通り加筆訂正させていただきます。
■対象箇所:P182の下から5行目〜P183
(※赤字部分が追記・訂正箇所となります)
なお、include_classメソッドの引数には「クラス名の配列」を渡すこともできます。このようにすると、配列に含まれるJavaのクラスをまとめてインクルードすることができます。
以下の例では、java.util.Date、java.awt.Dimensionという2つのクラスをまとめてインクルードしています。
------------------------------
include_class ['java.util.Date', 'java.awt.Dimension']
------------------------------
また、include_classの引数にブロックを渡すことで、指定したクラス名の配列の各要素に対して共通の編集処理をほどこすことも可能です。
あるパッケージから指定したクラスをまとめてインクルードしたい、あるいはインクルードするクラスに便宜的に別の名前を与えたい、というような場合など、この機能を使うと便利です。
以下の例では、java.util.パッケージの中からDateクラスとHashMapクラスだけを抜き出してインクルードしています。
------------------------------
include_class ["Date", "HashMap"] { |package, class_name| "java.util.#{class_name}"}
------------------------------
ちなみに、上記の処理は以下のように書き換えることもできますが、この場合はブロックを受け取っているのはArrayクラスのmapメソッドです。
include_class ["Date", "HashMap"].map { |class_name| "java.util." + class_name }
また、次のコードではJavaのStringクラスにJavaStringという別名をつけてインクルードを行っています。
------------------------------
include_class ("java.lang.String") { |package, class_name| "JavaString"}
------------------------------
|
|
【問2】
P.264のコードを実行するとNullPointerExceptionが発生します。
|
【回答2】
本書に記載のサンプルコードには、一部 JRuby 1.1.2上にて正しく動作しないものが含まれることを確認致しております。
誠に恐れ入りますが、このような場合はJRuby 1.1.4をご利用の上、ご確認頂きますようお願い申し上げます。
|
|
【問3】
3章以降でgemによるパッケージインストールが使用されていますが、実行するとOutOfMemoryERrorが発生します。
どうすれば回避できますか?
|
【回答3】
-J-Xmxオプションにより、Javaのメモリ最大使用量(最大ヒープサイズ)を多めに設定して実行してみてください。
[例]
>jruby -S -J-Xmx1024m gem install rails -v 2.0.2
|