我可以告诉Ruby方法期望特定的参数类型吗?

Vol*_*ort 7 ruby parameters methods

def doSomething(value)
    if (value.is_a?(Integer))
        print value * 2
    else
        print "Error: Expected integer value"
        exit
    end
end
Run Code Online (Sandbox Code Playgroud)

我可以告诉Ruby方法某个参数应该是一个Integer,否则崩溃?像Java一样.

sep*_*p2k 14

不,你不能.你只能做你正在做的事情:自己检查一下你的类型.


Dan*_*iel 6

我迟到了,但我想补充一点:

Ruby中一个非常重要的概念是Duck Typing.这个原则背后的想法是,你并不真正关心变量的类型,只要它们可以做你想做的事情.你想要的方法是接受一个响应(*)的变量.只要实例可以相乘,您就不关心类名.

正因为如此,在Ruby中,你会看到更经常的方法#responds_to?#is_a?

通常,只有在接受来自外部源的值(例如用户输入)时才会进行类型断言.


Gre*_*ogy 5

我建议加薪,除非在方法的开头输入匹配

def do_something(value)
  raise TypeError, 'do_something expects an integer' unless value.kind_of?(Integer)
  ...
end
Run Code Online (Sandbox Code Playgroud)

这是引发错误并退出,除非值是 Integer