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