Project

General

Profile

Actions

Feature #18626

closed

注釈付き代入演算子 ()= の提案

Added by takiuchi (Genki Takiuchi) about 2 years ago. Updated about 2 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
[ruby-dev:51170]

Description

型制約を実現するために以下のような注釈付き代入演算子を提案します。

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 or raise ValueRestrictionError
  end
end

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

いかがでしょうか。

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0