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