2022-10-01から1ヶ月間の記事一覧

Rubyの定数の探索順序

Ruby技術者認定試験の勉強のため、この機会にちゃんと理解しておく。 バージョン $ ruby --version ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [arm64-darwin21] 継承 子クラスに定数がない場合、親クラスの定数を参照できる。 class A FOO = "foo" BA…

Rubyのフリップフロップ (flip-flop) 構文

Ruby技術者認定試験の勉強をしていて、初めて知った機能だったのでまとめておく。 Ruby長年やってるけど、条件式の範囲式とか初めて見た。5.times { (_1==2)..(_1==3) ? p(_1) : 0 } みたいなやつ。— 神速 (@sinsoku_listy) 2022年10月6日 公式ドキュメント …

Ruby 3.1.xだと継承ツリーに後からincludeでモジュールを追加できる

Ruby技術者認定試験Goldの勉強をしていてRubyのバージョンによって変わっている挙動を知ったのでメモ。 検証コード module M1 def method_1 __method__ end end class C include M1 end p C.new.method_1 module M2 def method_2 __method__ end end module …

Rubyのensure節の挙動

Ruby技術者認定試験の対象バージョンがRuby 3.1.xになったので、試験勉強していて気づいた挙動をブログにメモっておく。 ensure節の値は無視される ensure 節が存在する時は begin 式を終了する直前に必ず ensure 節の本体を評価します。 begin式全体の評価…

Rubyで1つのインスタンスに同名メソッドを複数保つ方法

きっかけ Swiftでprotocolの実装を複数持てるのは便利そうだなぁと思ったことある。(foo as A).call だとA#call で、(foo as B).callだとB#callが呼べる的な #fukabori_rubykaigi_2022— 神速 (@sinsoku_listy) 2022年10月5日 よく考えたら as メソッドを…

RubyのModule#includeで引数を複数指定すると逆順で追加される

Module#include は引数に複数のモジュールを受け取ることができる。 しかし、以下のサンプルコードで分かるように、モジュールの順序は3行で書いたものと逆になるので注意がいる。 module A; end module B; end module C; end class Foo include A include B…