次のコードを実行するとどうなりますか。
10.times{|d| print d == 3..d == 5 ? "T" : "F" }
解説文
d == 3..d == 5の部分は条件式に範囲式を記述しています。
この式は、フリップフロップ回路のように一時的に真偽を保持するような挙動をとります。
詳細は、Rubyリファレンスに詳しい説明がありますのでそちらを参照してください。
初めて見た時に混乱しました。 どうゆう順番で評価するか整理して考える必要があったのでまとめます。
⑴Rangeの復習
# ..の場合
a = (1..5).to_a
=> [1, 2, 3, 4, 5]
# ...の場合
a = (1...5).to_a
=> [1, 2, 3, 4]
👆
..の場合は5を含む1〜5の範囲になる。
...の場合は4.9999...までは対象になるが5は範囲に含まない。整数で考えると1〜4が範囲になる。
ひとつずつ崩して考えて理解する
10.times
{|d| print d == 3..d == 5 ? "T" : "F" }
10.times
0..9の範囲を考える => 0123456789
(d == 3)..(d == 5)
dが3〜5の時に(わかりやすく括弧で囲いました。)
? "T" : "F"
条件式:trueの場合"T"を出力、falseの場合は"F"を出力。
【補足】
三項演算子: 条件式 A ? 式 B : 式 C
条件式 A が真の時は式 B が実行され、偽の時は式 C が実行される。
012345
6789
345がTrueのためTが出力される
結果としてFFFTTTFFFFが出力される
ソニックガーデンjnchitoさんの記事:https://qiita.com/jnchito/items/e7aa147e340311e94a4d その他参考解説:https://www.yokoyan.net/entry/2019/07/26/224946