-1

Relatively new to Ruby, and I am having a lot of trouble with documentation. My main problem is, how do I tell what type of object is returned from a method?

If I take a look at Objective-C or Java docs, I can see:

FunctionX returns object of type Y.

I can click on Y and find out all about that class. Contrast that with ActiveRecord::Base's docs. If I look at the #connection method, it tells me:

Returns the connection currently associated with the class. 

What the heck is a connection? I want to find out more about the connection object's class. Doesn't every method specify what the return type is?

4

1 に答える 1

2

Rubyはダックタイピングを使用しています

Rubyはあなたが考えるように型を使用しません。メソッドは、最後に評価された式を返すだけです。次のような戻り値を使用して、好きなことを行うことができます。

  1. #inspectそれ。
  2. そのに聞いて#classください。
  3. それが#respond_to?何らかの方法になるかどうかを確認してください。
  4. あなたがそれでやりたいと思うかもしれない他の何でも。

あなたの質問について...

Railsのドキュメントは、アプリケーションで一般的に触れることが予想されることについてはかなり徹底していますが、内部については少しわかりにくい場合があります。それでも、ActiveRecord::BaseのAPIドキュメントはまったく不明確ではないようです。

接続は通常、:: establish_connectionを介して作成され、#connectionによって取得されます。ActiveRecord :: Baseから継承するすべてのクラスは、この接続を使用します。

実用的な目的で、通常はファイルで定義されているデータベース接続を説明するオブジェクトを取得しconfig/database.ymlます。例えば:

$ rails runner 'puts ActiveRecord::Base.connection.class'
ActiveRecord::ConnectionAdapters::SQLite3Adapter

Railsの内部を理解しようとしている場合は、深くネストされたメソッド呼び出しを追跡し、フレームワークを支えるRubyメタプログラミング(BasicObject#method_missingなど)を理解する必要があります。ただし、ダックタイピングを使用して返されたオブジェクトを処理することで、多くの問題を回避できます。

于 2013-01-20T09:07:02.283 に答える