1

質問する前に、私はプログラミングの初心者であることをみんなに警告したいので、ばかげたことを聞いたら訂正してください。

私はRubyがオープンクラスを持っていることについて読んでいます。つまり、メソッドを追加することができます。ただし、Railsが既存のRubyクラスにどのように追加されたかの例をいくつか取得しようとしています。

4

3 に答える 3

2

Railsには非常に多くのコア拡張機能があり、それらは別の宝石であるActiveSupportにあります。

ここですべてを説明しようとしても意味がありません。Railsガイドを紹介します。それらに精通した後、必要に応じてドキュメントを参照してください。

于 2012-04-17T01:47:16.123 に答える
2

私は2番目のマテウスです。ActiveSupportは良い例です。ここでいくつかのソースコードファイルを見てください:

https://github.com/rails/rails/tree/master/activesupport/lib/active_support/core_ext

そして、これは典型的で単純な例であり、Rubyの標準のArrayクラスに有用でやや物議を醸すメソッドを追加します。

https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/array/access.rb

ほとんどのRubyライブラリには、「core_ext」、「ext」などの名前のディレクトリがあり、Rubyのコアライブラリを何らかの方法で拡張するメソッドが含まれています。人々は常にメソッドを再発明し、ある意味でActiveSupportはそれらの決定的なコンパイルです。

于 2012-04-17T01:59:23.460 に答える
0

良い例が時間であることがわかりました

Railsアプリケーションから

時間。

Loading development environment (Rails 3.2.3)
1.9.3p125 :001 > Time.
Display all 252 possibilities? (y or n)
                                           Time.module_exec
Time.__delay__                             Time.mongo_thread_local_accessor
Time.__id__                                Time.name
...

Total = 252

プレーンルビーコンソール(IRB)から

$ irb
1.9.3p125 :001 > Time.
                                 Time.hash                        Time.private_method_defined?
Time.__id__                      Time.include?                    Time.private_methods
Time.__send__                    Time.included_modules            Time.protected_instance_methods
...

Total = 93
于 2012-04-17T02:25:19.843 に答える