Stack Overflowに面白そうな質問があったから回答してみた。
Kernel
モジュールのメソッドはprivateメソッドとして各オブジェクトに定義されているのは、関数形式でメソッドを呼び出した時に直感的になるためかなあと予想している。
class A def foo # ここでputsを呼び出せるということは、putsはAクラスのインスタンスメソッドである必要がある。 puts 'x' end end # でもこれでputsを呼び出せるのは変、つまりputsがprivateメソッドだと辻褄が合う A.new.puts 'x'
久々にrails/railsにPRをした。ちなみにPRをするのは2回目で、前回はちょうど5年前。次は2025年にPRを投げるぞ。
PRにも書いたのだけど、このパッチが本当に必要なのか全然分からなかった。 それでPRを出すか迷っていたのだけど悩んでも仕方ないなとPRしてみたところ、速攻でmergeされた。
しかも、config.active_support.bare
というオプションのために必要という解説までしてもらってひとつ賢くなった。PRしてよかったー。
rails/railsに投げたPRで教えてもらったドキュメントを読んでいて、ついでにその日本語版も読んでいたら、なんか訳がしっくりこなかったのでPRした。
いまいち「Active Support Within a Ruby on Rails Application」の意味をつかめなくてしばらく悩んでいたのだけど、前の章の「Stand-Alone Active Support」と対になっていることに気がついたので、そんな感じで訳した。
rails/railsにPRを投げる時に便利なテンプレートがあるという話だけ覚えていてどこにあるかすっかり忘れてしまっていたのだけど、「rails pull request bundler inline」などとググって発見した。
rbs prototype runtime
で遊んでたらRubyのバグを踏み抜いてしまった。次のコードが止まらなくなる。
module M def x end end module M2 include M private :x end ::Object.prepend(M2) # infinite loop p Object.instance_method(:x)
実際にはActive Supportのfork_tracker.rb
を読み込んだあとに、任意のクラス.instance_method(:fork)
で止まらなくなっていた。
https://github.com/rails/rails/blob/df50341fe8e03229308a0389bc14a654bbae666c/activesupport/lib/active_support/fork_tracker.rb
原因を突き止めるのが中々大変だった。printデバッグを仕込みつつ、止まらなくなったらC-zしてkill -9
していた。
https://gist.github.com/pocke/2ed43fdbc11fa0df72d098a65127fea4
Active Recordの型定義をrbs prototype runtime
を使って生成してみた。
まだ「とりあえず生成するコマンドを動かすことができた」レベルで、実験的にこの定義を読み込むことすらしていない。
これを動かすために、上で書いたRailsのバグやRubyのバグと戦っていたのでした。
あとautoloadが中々に強敵だった。autoloadが定義された定数はまだ存在しないので、ObjectSpace.each_object(Module)
とかしても手に入らない。
ただModule#constants
には反映されるっぽいので、それを辿ってとりあえず全部のconstをconst_get
してみる、というコードを書いた。
しかしautoloadが必ずしも成功するとは限らないので、const_get
をrescue
してエラーは握りつぶす、みたいなコードを書いていた。むずかしいね。
- 発売日: 2013/04/26
- メディア: Kindle版
日本史を読み終わったので、今は世界史を読んでいる。
これも読んでいる。Twitterかruby-jpかで紹介されていたのをほしい物リストに突っ込んでいた気がする。
読みやすい文章で、すぐ読み終わりそう。Kindleだと本の分厚さが分からなくて少し不便。
途中数式が出てきて、「あーこれ適当なプログラミング言語で書かれていたらサッと理解できるのにー」と思いながら読み飛ばした。
恋する小惑星をちょうど並行して見ているからか、本の内容がめっちゃ面白く感じる。
最近ずっと「姫のためなら死ねる」を読んでいる。そろそろ既刊の10巻を読み終わりそう。めっちゃいい。
清少納言のクズ力が高くていい。定子様かわいい。貴子様のキャラ好き。よい百合。
巻を追うごとに良くなっている気がする。
これを機に平安文化を勉強したい気がする。