2022/03/24 今回の気になった bugs.ruby のチケット
今週は注釈付き代入演算子を提案するチケットなどがありました。
[Feature #18626] 注釈付き代入演算子 ()= の提案
- 以下のような注釈付き代入演算子の提案になる
class Object # 代入するときの処理をフックする def self.()= (what) what.is_a? self or raise TypeRestrictionError end end # 代入する時に注釈を指定して定義する age (Fixnum) = 30 # メソッドの引数にも定義できる def add(a(Numeric), b(Numeric)) a + b end add 1, "2" # raises TypeRestrictionError
- この提案なんですが以下のような理由から Reject されています
文法的にも意味論的にも大変興味深い提案ですが、Ruby言語にいかなる形であれ型宣言や型注釈を導入するつもりはありません。すみません。
まつもと ゆきひろ /:|)
- これは面白いなー既存の構文を壊さないようにしてなんか定義できないだろうか
[Feature #18644] Coerce anything callable to a Proc
- 呼び出し可能オブジェクトを拡張するためのメソッドを追加する提案
#call
メソッドをProc
化するObject#to_proc
class Object # call メソッドを `Proc` オブジェクト化する def to_proc return method(:call).to_proc if respond_to?(:call) raise "Needs to respond to :call" end end class Proc def to_proc self end end callable.to_proc.curry[value]
- 引数を
Proc
オブジェクト化するKernel#Proc
class Kernel def Proc(value) if value.is_a?(::Proc) value elsif value.respond_to?(:call) value.method(:call).to_proc else raise "Needs to implement :call" end end end Proc(callable).curry[value]
#call
メソッドがあるオブジェクトをProc
化したいケースってどれぐらいあるんですかね
[Feature #18640] default empty string argument for String#sub
and String#sub!
, e.g. "hello".sub("l")
String#sub(pattern, replace)
のreplace
のデフォルト値を""
にする提案
# "hello".sub("l", "") と同じ意味になる p "hello".sub("l") # => "helo"
sub
って名前なのに引数が1つしかないのがちょっと気持ち悪いなあ