[ruby-dev:51170] [Ruby master Feature#18626] 注釈付き代入演算子 ()= の提案

From: "takiuchi (Genki Takiuchi)" <noreply@...>
Date: 2022-03-12 01:47:09 UTC
List: ruby-dev #51170
Issue #18626 has been reported by takiuchi (Genki Takiuchi).

----------------------------------------
Feature #18626: 注釈付き代入演算子 ()= の提案
https://bugs.ruby-lang.org/issues/18626

* Author: takiuchi (Genki Takiuchi)
* Status: Open
* Priority: Normal
----------------------------------------
型制約を実現するために以下のような注釈付き代入演算子を提案します。

```
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
```

左辺値の後に`(...)` が続いた場合に`()`内の値に対して`()=`演算子を呼び出します。
Rubyはメソッドの返り値が左辺値になることは無いので既存の文法とは衝突しないかなと。

以下のようなenum的な制約も便利だと思います。

```
class Array
  def ()= (what)
    self.include? what
  end
end

flag([1,2,3]) = 3
```

いかがでしょうか。



-- 
https://bugs.ruby-lang.org/

In This Thread

Prev Next