0

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

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中,做类型检查?
谢谢。

4

2 回答 2

1

你可以像这样让它“漂亮”:

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
于 2016-06-10T12:42:41.363 回答
0

你总能做到

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

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

于 2016-06-10T10:56:49.160 回答