2020/12/10 今週の気になった bugs.ruby のチケット
内容は適当です。
今週と言っても今週みかけたチケットなだけでチケット自体は昔からあるやつもあります。
あくまでも『わたしが気になったチケット』で全ての bugs.ruby のチケットを載せているわけではありません。
[Feature #17361] lambda(&block) does not warn with lazy proc allocation
- Ruby 3.0 から
lambda(&block)
を書き方をすると警告が出るようになる
def foo &block b = block lambda(&b) end block = proc {} # warning: lambda without a literal block is deprecated; use the proc without lambda instead lambda(&block) # warning: lambda without a literal block is deprecated; use the proc without lambda instead foo {}
- これは
lambda
に&proc {}
を渡した場合にlambda
として扱われない、という問題が背景にある- これを対処するために Ruby 3.0 からは非推奨な書き方となった
- 詳細: [Feature #15973] Let Kernel#lambda always return a lambda
block = proc {} # lambda にしているのに lambda? は false を返す p lambda(&block).lambda? # => false
- しかし、次のようにブロック引数を直接
lambda
に渡した場合に警告がでない、という報告チケットになる
def foo &block # no warning lambda(&block) end foo {}
- なぜ…
[Feature #17380] Useful include/prepend
in refine
- Refinements の制限として次のように
refine
で定義したメソッドを自身で呼び出した場合はエラーになる
module Code def recurse(value = nil) return value if value # このコンテキストでは using されてないので自身のメソッドも呼ぶことができない recurse(42) # => NoMethodError!!! end end module Extension refine Object do include Code end end using Extension # using したコンテキストからは呼び出すことができる :x.recurse(:y) # => :y (ok) :x.recurse # => NoMethodError, was hoping for 42
- これを緩和しないか、という旨のチケット
- 確かにこれは直感的ではないんだけどこれを許容するとなんかいろいろとぶっ壊れる気がするんだよなぁ…
- このあたりの挙動はなんかいい感じにしたいと思いつついい考えが浮かばない…
[Bug #17377] A warning message doesn't display using -W option on irb
irb
に-W
を渡してもdeprecated wanirng
が出ない、というバグ報告
# ruby コマンドで -W を付けると警告が出る $ ruby -W -e "Object.tainted?" -e:1: warning: Object#tainted? is deprecated and will be removed in Ruby 3.2 # しかし irb だと -W を付けても警告が出ない $ irb -W irb(main):001:0> Object.tainted? = > false
- これはすでに修正 PR が投げられてる
- 余談ですが昨日の Hamada.rb で一緒に原因を調べていました
[PR #3867] Make ruby -We the same as ruby -W -e
-W
と-e
を一緒にした-We
オプションを追加する PR
ruby -W -e "p Warning[:deprecated]" true
- ニッチといえばニッチだけど需要があったりしますかねえ…
- ちょうど [Bug #17377] A warning message doesn't display using -W option on irb の原因を調べている時にほしいと思いました!!!