2021/01/28 今週の気になった bugs.ruby のチケット
内容は適当です。 今週と言っても今週みかけたチケットなだけでチケット自体は昔からあるやつもあります。 あくまでも『わたしが気になったチケット』で全ての bugs.ruby のチケットを載せているわけではありません。
[PR 4113] Add --warning=category option the same as -W:category
-W:category
と同じ意味を持つ--warning=category
を追加する PR- チケット自体は特になさそう?
--warning=category
のほうが意味的にはわかりやすそうなのであると便利そう
[Feature #17576] Partial Functions (procs, lambdas)
- ブロック構文に
in
を使ったガード節を追加する提案 - 以下のように
in
を使ってガード節を書くin x if x.odd?
の部分がガード節の条件
partial_proc = proc do |arg| in x if x.odd? "#{x} is odd" end
- このような定義をして以下のような操作を行う
# `defined?` で引数が有効かどうかを判定する partial_proc.defined?(42) #=> false partial_proc.defined?(41) #=> true # call で実際に呼び出す # 該当するガード節がない場合は例外が発生する partial_proc.call(42) #=> raises NoMatchingPatternError (42) partial_proc.call(41) #=> 41 is odd # call_or_else で見つからなかった場合の挙動をブロックに記述する partial_proc.call_or_else(42) { "fallback value" } #=> 'fallback value' partial_proc.call_or_else(41) { "fallback value" } #=> 41 is odd
- これを用いて
FizzBuzz
を書くと多分以下のような感じ?
p (1..20).map do |n| in Integer if n % 15 == 0 "fizzbuzz" in Integer if n % 3 == 0 "fizz" in Integer if n % 5 == 0 "buzz" in Integer n end
- 最初のコードを見たときは『どういうこっちゃ?』と思ったけどガード節と見れば納得
- カード節は普通に便利なのでほしい
- ただ
defined?
やcall_or_else
は微妙なのでこれは別に議論すべきじゃないかなーと思わなくもない
[Bug #17557] IRB array returned in multiple lines
- irb 1.3.0 で
irb
のデフォルトの出力がinspect
からpretty_inspect
に変わったけど元の挙動に戻せる?みたいなチケット
# 以前のバージョン 's'.methods = > [:unicode_normalize, :unicode_normalize!, :ascii_only?, :to_r, :unpack, ..., :!=, :equal?, :__id__, :instance_eval, :instance_exec] [2021-01-28 00:26]
# irb 1.3.0 's'.methods = > [2021-01-28 00:26] [:unicode_normalize, :unicode_normalize!, :ascii_only?, :to_r, :unpack, ..., :!=, :equal?, :__id__, :instance_eval, :instance_exec]
- 元の
inspect
を呼び出す挙動に戻す場合は~/.irbrc
とかに以下の設定を書いておけば OK
IRB.conf[:INSPECT_MODE] = :inspect
- ちなみにこの変更はバックポートされているので Ruby 3.0.1 から反映されそう