Ruby:类型检查器参数,类似于 Cadence SKILL

Ruby: type checkers arguments, akin to Cadence SKILL

在Cadence SKILL(专有的EDA语言,基于LISP & SCHEME)中,可以在过程中定义参数类型。
如果参数类型错误,将会出错。请参阅下面的 shell 报告:

procedure( foo( ko "t" ) printf( "Hey %s\n" ko ) )
>foo
>foo("1")
>Hey 1
>t
foo(1)
>*Error* foo: argument #1 should be a string (type template = "t") - 1

有没有像 Ruby 中那样漂亮的东西?也就是在方法接口定义中,而不是body中,做了类型检查?
谢谢。

你总能做到

fail 'Keep input as a string' unless variable_name.is_a?(String)

虽然不是动态类型语言的思路,但尽量实现duck-typing

你可以这样"nifty":

module FirstArgumentIsAString
  module Initializer
    def initialize(word)
      fail 'Word must be String' unless word.is_a?(String)
      super
    end
  end

  def self.included(klass)
    klass.send :prepend, Initializer
  end
end

class Foo
  include FirstArgumentIsAString
end

y = Foo.new(2)
> Uncaught exception: Word must be String