2020/10/15 今週の気になった bugs.ruby のチケット
内容は適当です。
今週と言っても今週みかけたチケットなだけでチケット自体は昔からあるやつもあります。
あくまでも『わたしが気になったチケット』で全ての bugs.ruby のチケットを載せているわけではありません。
[#3626] Add Ractor.receive and Ractor#receive and use them everywhere
- bugs.ruby のチケットではなくて github の PR
Ractor.recv
やRactor#recv
をRactor.receive
やRactor#receive
に変更する PRrecv
という名前は alias されて残ってはいる- マージ済み
GitHub - ruby/typeprof: An experimental type-level Ruby interpreter for testing and understanding Ruby code
- これも bugs.ruby のチケットではない話
- TypeProfiler が ruby のリポジトリに移動して、TypeProf という名前に変わった
gem install typeprof
でシュッとインストールできるようになったgem install typeprof
するとtypeprof
コマンドが使えるようになるのでシュッと試すことができる- e.g.
typeprof app.rb
- e.g.
[Feature #17260] Promote pattern matching to official feature
- Ruby 2.7 で実験的に入ったパターンマッチを正式に導入するチケット
- またこのチケットでは以下のような 1行 の in を削除する内容も含まれている
- 1行 in とは以下のように記述する事ができる構文
- これは実質 JavaScript の分割代入のように使うことができた
user = { name: "homu", age: 14 } case user in { name:, age: } pp name pp age end # 上のコードを1行で書くことができた user in { name:, age: } pp name pp age
- 右代入でこの機能を実装する等、いろいろと懸念点があるので一旦この機能は削除する方向になっている
- ちなみに即効で
=>
での分割代入が実装されていたりする…
[Feature #16276] For consideration: "private do...end" / "protected do...end"
private
にブロックを渡せるようにするチケット
class Foo # ...there may be prior old-school public/private/protected declarations... def method_at_whatever_traditional_ruby_protection_level_applies puts "I'm traditional" end private do def some_private_instance_method puts "I'm private" end def self.some_private_class_method puts "I'm also private - principle of least surprise" end NO_NEED_FOR_PRIVATE_CONSTANT_DECLARATIONS_EITHER = "private" end def another_method_at_whatever_traditional_ruby_protection_level_applies puts "I'm also traditional" end end
- 某勉強会で『
private
のブロック内でインスタンスメソッドやクラスメソッド、定数なんかを定義したらprivate
になってほしいよねー』という話をしていて読んでいた
class Foo private do # 以下が全部 private になってほしい def private_hoge end def self.private_foo end HOGE = "hoge" end end
- クラスメソッドなどを
private
にする場合は特異クラスで定義するしかないのでこういう記法でかけると嬉しい- 余談だが後から
private
メソッドを追加することを考えてクラスメソッドを定義するときは必ずclass<<self
する人もいるらしい
- 余談だが後から
class Foo # private クラスメソッドを書く場合は class<<self みたいな書き方をする必要がある class <<self private def private_foo end end end
- ちなみに以下のようなコードがコメントに書かれていてつらい気持ちになりました…
class Foo Bar = proc do Baz = 1 def foo Baz end end end class Bar private(&Foo::Bar) end
- ちょっと意味は違うがこういうコードを見ているとつらい気持ちになっている…
merge, fix されたチケット
- [#3626] Add Ractor.receive and Ractor#receive and use them everywhere
- Ractor の
recv
をreceive
に変える PR
- Ractor の