内容は適当です。
今週と言っても今週みかけたチケットなだけでチケット自体は昔からあるやつもあります。
あくまでも『わたしが気になったチケット』で全ての 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 の