Rubyのソースコードの読み方

このQ&Aのポイント
  • Rubyのソースコードを読んでいくと、変数の型やメソッドの挙動がわからなくて困っています。
  • 特に、gs.addrというメソッドの挙動がわからず、正体が知りたいです。
  • 動的にデバックする方法はないので、どのように情報を得ればいいか教えてください。
回答を見る
  • ベストアンサー

Rubyのソースコードの読み方

現在JavaからRubyに移行しようと勉強をしているのですが、Rubyのソースコードを読んでいくと、変数に何が入っているかわからなくて困っています。 ソースコードを例に説明させていただくと、 gs = TCPServer.open(12345) addr = gs.addr こんなソースがあったとして、2行目のgs.addrというメソッドが何をするメソッドなのか知りたいとします。 しかしRubyでは型宣言をしないので、gsが何のクラスなのかわかりません。 そこでTCPServerクラスのリファレンス(http://www.ruby-lang.org/ja/old-man/html/TCPServer.html)を見るのですが、このサイトのクラスメソッド欄にかいてあるTCPServer.openを呼んでも、戻り値の型が書いていません。 このような場合どうやって、gs.addrメソッドの挙動をしればよいのでしょうか?なお現在は動的にデバックするという方法は無しで考えています。 ご回答よろしくおねがいします。

  • Ruby
  • 回答数1
  • ありがとう数11

質問者が選んだベストアンサー

  • ベストアンサー
  • koko_u_u
  • ベストアンサー率18% (216/1139)
回答No.1

> そこでTCPServerクラスのリファレンス(http://www.ruby-lang.org/ja/old-man/html/TCPServer.html)を見るのですが、 > このサイトのクラスメソッド欄にかいてあるTCPServer.openを呼んでも、戻り値の型が書いていません。 これを見ると、結局 TCPServer.open は TCPServer.new と同じで TCPServer のインスタンスが返っているようですね。 で、そのマニュアル古いから(URL も old-man てなってる)こっちを参照するといいよ http://doc.ruby-lang.org/ja/1.9.2/class/TCPServer.html

lain_003
質問者

補足

なるほど、リファレンスの読み方が甘かったようですね。お恥ずかしいかぎりです。 参考になりました。ありがとうございました。

関連するQ&A

  • javaのソースコードがわかりません

    初心者には難しすぎるのでおしえてください。 クラス名 Advance5 ※main()メソッドがあるクラス Sub5_StaticCheck 指示 Advance5 クラス main()メソッド Sub5_StaticCheck クラスのcallDisp()メソッドを呼び出す ※インスタンスを生成せずに実行 Sub5_StaticCheck クラス callDisp()メソッド 定義 修飾子 : public キーワード : static 戻り値の型 : void 引数 : なし 指示 disp()メソッドを実行する その際、BufferedReader クラスを使用してキーボードから文字列を1 つ入力し、入力した文字列を引数として1つ渡す disp()メソッド 定義 修飾子 : public 戻り値の型 : void 引数 : String 型の値を1つ 指示 引数で受け取った値を表示する

  • オープンソース

    オープンソースの一部のコードを改造して自分のコードとして使うのは許可されてるのでしょうか? 例えば、Strutsのあるクラスのある一つのメソッドを改造して自分のクラスの一部として使うのはいいんでしょうか?

  • RubyでJavaのInterfaceに相当するものはありますか?

    RubyでJavaのInterfaceに相当するものはありますか? Ruby 上で Javaの interface のようなものものを実現するには、どうしたらよ いのでしょうか? Rubyは型を宣言しないので機能的には interface は不要ですが。 クラスを実装する人に、あるクラスに実装しなければいけないメソッドを伝える (強制する)目的としての interface 的な使い方をしたいのです。 宜しくお願いいたします。

  • メソッド宣言の戻り値の型にクラス名を使うには?

    メソッドの戻り値の型にクラス名を使ってるプログラムを見かけたのですが、例えばクラス名を public class Player{ とします。そして Playerクラスのメソッド宣言に  private   Player(戻り値の型) startRun(メソッド名) { とあります。 これは戻り値の型にクラス型の変数を使ってユーザー定義してると思うのですが使い方が分かりません。 javaのサイトはできるだけ調べたのですが戻り値の型にクラス名を使うにはどうすればいいか分かりませんでした。 この使い方を教えてくれるサイトを教えてください。 基本型と参照型のStringクラスについて教えてくれるサイトはたくさん見かけたのですが…。 お願いします。

    • ベストアンサー
    • Java
  • 例外処理をするソースコードについて

    例外処理するソースコードについて質問があります。 まず例外処理される前のファイルのソースコードを見てください。 public class JTest13 { public static void main(String[] args) { System.out.println("実行開始"); long lngTmp; //以下を実行した瞬間に引数が無いか、整数に直せなかったら例外がスローされる lngTmp = Long.parseLong(args[0]); //割り算を実行する(小数点以下の数値を管理する必要がある)ため、double型に変換します System.out.println(Double.parseDouble(args[0]) / 2); System.out.println("tryブロック終了"); System.out.println("実行終了"); } } ここでアルファベットを入力すると、 実行開始 Exception in thread "main" java.lang.NumberFormatException: For input string: "a" at java.lang.NumberFormatException.forInputString(Unknown Source) at java.lang.Long.parseLong(Unknown Source) at java.lang.Long.parseLong(Unknown Source) at JTest13.main(JTest13.java:20) これで例外処理クラスがNumberFormatExceptionだと分かるんですが、 こういう結果がでなければいけません。 実行開始 例外:java.lang.NumberFormatException For input stirng:"a" 引数を整数で入力して下さい。 実行終了 これで問題なのがmainメソッドで例外処理するのではなく、整数チェック用のメソッド内でエラー処理するプログラムを作らなければならない事です。 変数がargs[0]なのでどうやってメソッドを作っていいのか分かりません。 ヒントだけでいいので、どうぞ宜しくお願い致します。

    • ベストアンサー
    • Java
  • Ruby言語に関して質問です。

    Rubyで、クラス定義の際の質問です。 通常 cattle= Class.new(); で引数がデフォルトの場合は、Objectクラスのサブクラス生成すると 公式のリファレンスに記述があります。 調べてみると上記コードの場合は,cattleという無名クラスと呼ばれるものになるそうです。 この無名クラスとはYUGUIさんのサイトにある http://yugui.jp/images/uploaded/20084013-metaclass.png 右端の列にあるメタクラスと呼ばれるものになるのでしょうか? (無名クラス と メタクラスは同義??) また上記URLの画像からメタクラスはClassクラスのインスタンスであるようです。 ただClass.newで実行される newというクラスメソッドってサブクラスを生成すると いうふうにリファレンスにありますがレシーバであるClassクラスのインスタンスを 返すという記述はありません。 ただ、おそらくメタクラスというのはClassクラスのインスタンスなのだとは思いますが、 この理由はなぜなのでしょうか? もう一点、p Cattle.class();と記述すると Classクラスが返ると思います。これはCattleクラスのClassクラスのインスタンスである ということになるのでしょうか? しかしながらYUGUIさんの画像ではCattleはメタクラスのインスタンスとなっています。 であれば、メタクラスを意味するのでしょうか? 公式リファレンスには、上記に書いたような関係はRubyを扱う際には特に問題ではないとありますが、気になっています。

    • ベストアンサー
    • Ruby
  • rubyでnums.each_char()の意味を探したい

    rubyでnums.each_char()の意味を探したい 参考書で、nums.each_char()の意味を探したいのですが、どうすればいいのでしょうか?普通にリファレンスを見ると、each_char()の別のクラスでの説明は見つかるのですが、numsクラスの説明がありませんでした。このような時、どうすれば解決できますでしょうか?このメソッドの意味と探す方法を教えてください。 当方初心者なので、簡単な言葉で説明してくださると助かります。 よろしくおねがいします。

    • ベストアンサー
    • Ruby
  • rubyのインスタンスのクラス名取得

    現在rubyを勉強しているのですが、わからないことがありこまっています。 それはインスタンスにどんなクラスが入っているかわからないのです。 具体的にソースで説明させていただきます。 f= File.open("hello.txt") このfのインスタンスにどんなクラスのインスタンスが格納されているか知りたいのですが、何か方法は無いのでしょうか?

    • ベストアンサー
    • Ruby
  • モジュールの概念・リファレンスとオブジェクト

    {  package TEST;  new { bless {}; }  method {} } 最も簡単な(何もしない)クラスを作ってみたのですが、 $obj = new TEST; とした場合、この戻り値は『自分がどのパッケージに属しているか知っているリファレンス』である、と理解しました。 ここで考えたのですが、パッケージ外で $obj->method(); とした場合は『クラスのメソッド』を呼べると思うのですが 『自分がどのパッケージに属しているか知っているリファレンス』=要するにリファレンス に対してアロー演算子をつけると、クラスオブジェクトを表すようになるという概念が理解できません。 $obj->method(); は リファレンス->関数 という事になり、意味がわかりません。 挙動はわかるのですが、内部的にどのように処理しているのかをご存知の方、もしくはそれに関して言及している資料などご存知の方が居ましたら教えていただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • どんなソースコードを書けば良いでしょうか

    Javaのソースコードについの質問です。 既存の処理に対するバリデーションの追加を急遽やらなければならなくなったのですが、Javaが初心者過ぎて大混乱しています。 必要な情報を提示できて いるかどうかすら判断がついていないのですが、どうかヒントをご教授いただけませんでしょうか。 パッケージはStrutsを使用しています。 処理はアクションフォームのValidメソッドに記述し、ActionクラスでValidメソッドを呼び出します。(たぶん…) 記述したいのは以下のようなバリデーション処理です。 画面上にコンボボックスが2つあり、それぞれの項目で選択された値の組み合わせによってバリデーションをつけたいです。 以下の条件に当てはまらない場合、Messageクラスに定義したエラーメッセージを表示させます。         (1)A項目の値にイが選択された場合                 B項目の値はあorいorう が選択されている         (2)A項目の値にロが選択された場合                 B項目の値はえorおorか が選択されている   (3)A項目の値にハが選択された場合                 B項目の値はきorくorけ が選択されている リストなどを使えば良いのでしょうか…? ざくっとこんな感じのコードになるのでは?でもちろん構いません。 何卒よろしくお願いいたします。

専門家に質問してみよう