の引数をブロックの引数として受け取る事ができる ractor = Ractor.new(10) do |loop_count| loop_count.times do puts :hello sleep 0.3 end end # 並列処理が終了するまでブロッキングする # p ractor.take 10.times do puts :world sleep 0.3 end デモ デモ
2.7 から⼤きくは変わっていない Ruby 3.0 から find パターンがかけるようになった case ["a", 1, "b", "c", 2, "d", "e", "f", 3] in [*pre, String => x, String => y, *post] p pre #=> ["a", 1] p x #=> "b" p y #=> "c" p post #=> [2, "d", "e", "f", 3] end
から少しだけ挙動が変わった # end を書かずにメソッドが定義できる def twice(a) = a + a p twice 42 # => 84 # preview1 では () が必須だったが引数がない場合に限って現在は省略できる def value = 42 # = 付きメソッドが定義できないのは現状もそのまま # error: setter method cannot be defined in an endless method definition def value=(value) = @value = value
= expr # change: allow if there is space between method name and "="; it shall be the same as "def foo; expr; end" def foo() = expr => var # change: it shall be "def foo(); expr => var; end" # 現状はこうなっている def foo() = expr => var # は以下のように解釈される (def foo() = expr) => var
参照: みてね!! これにより⼀部のコードの挙動が変わったりしているので注意する [Bug #7844] include/prepend satisfiable module dependencies are not satisfied [Bug #17038] On master, ancestry edits can lead to duplicates in Module#ancestors Bug #16852 Refining Enumerable fails with ruby 2.7 [Bug #17130] Method#super_method is broken for aliased methods RubyWorld Conference 2020
#16973] Rails Active Support unit test fails since 41582d5866 [PR #39697] Use ActiveSupport::ToJsonWithActiveSupportEncoder#to_json for Ruby 2.8.0 module M end # Ruby 3.0 からはこれの prepend が Array にも反映されるようになる Enumerable.prepend M Array.prepend M p Array.ancestors # Ruby 2.7 => [M, Array, Enumerable, Object, Kernel, BasicObject] # Ruby 3.0 => [Array, M, Enumerable, Object, Kernel, BasicObject]
String のサブクラスのメソッドの戻り値が変更された 今までは⼀部のメソッドがサブクラスを返していたが Ruby 3.0 から は Array や String を返すようになった これの影響で Rails の⼀部が壊れた 参照: [PR #40663] Let AS::SafeBuffer#[] and * return value be an instance of SafeBuffer in Ruby 3.0 [Bug #6087] How should inherited methods deal with return values of their own subclass? [Bug #10845] Subclassing String 【Ruby 3.0 Advent Calendar 2020 】Array やString のメソッドの返り 値が変更された話【15 ⽇⽬】 - ゲームリンクスの徒然なる⽇常
private public protected の引数の受け取り⽅と attr_reader attr_writer att 戻り値が変わります private などに配列を渡すとその配列の要素に対して適⽤されます attr_reader などの戻り値は定義されたメソッド名のシンボルが配列 てきます ⼀応⾮互換になるのでちょっと注意 で、今⽇この機能のマージされたんですがその後に 現在は Revert されています Ruby 3.0 でどうなるのかはまだ未定… 参照: CI がランダムでコ いう報告があり https://github.com/ruby/ruby/commit/982443e6e373f5a3ac22ee495909 [Feature #17314] Provide a way to declare visibility of attributes defined methods in a single expression