2016-06-10 6 views
0

В Cadence SKILL (собственный EDA-язык, основанный на LISP & SCHEME), можно определить типы аргументов в процедуре.
Он выдает ошибку, если указан неправильный тип аргумента. См. Отчет о раковине ниже:Ruby: аргументы типа шашек, похожие на Cadence SKILL

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? То есть, в определении интерфейса метода, а не в теле, проверка типа выполняется?
Спасибо.

+0

№ Руби не имеет встроенных аннотаций типа. –

ответ

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 
+0

Ничего себе. Почти то, что я хотел, я могу настроить это, чтобы сделать то, что я предусмотрел. Благодарю. – user1134991

0

Вы всегда можете сделать

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

пока это не динамический язык типирование способ мышления, попытаться достичь утиного набрав