Ruby支持类型提示吗?

PHP示例:

function do_something(int $i) { return $i + 2; } 

Ruby示例:

 class MyClass # ... end def do_something(MyClass x) x.prop1 = "String..." end 

有什么类似的吗? 谢谢。

Ruby没有这样的东西,但你所要做的就是添加一行,如下所示:

 def do_something(x) raise "Argument error blah blah" unless x.kind_of?(MyClass) ... end 

没有大碍。 但如果你觉得它太冗长,那么只需定义一个方法:

 module Kernel def verify klass, arg raise "Argument error blah blah" unless arg.kind_of?(klass) end end 

把它放在第一行:

 def do_something(x) verify(MyClass, x) ... end 

如果您确实要确保对特定类的实例(如整数)执行某个操作,请考虑在特定类上定义该操作:

 class Integer def two_more self + 2 end end 3.two_more #=> 5 2.0.two_more #=> undefined method `two_more' for 2.0:Float (NoMethodError) class MyClass def do_something self.prop1 = "String..." end end 

无耻的插件 – 我刚刚发布了一个rubygem – http://rubygems.org/gems/type_hinting

用法在这里 – https://github.com/beezee/ruby_type_hinting

我先去寻找它并找到了这个post。 找不到我想要的东西,所以我写了它,并想到我会在这里分享。

我认为它比这里提出的任何解决方案都更简洁,并且还允许您为方法指定返回类型。

不,Ruby本身不支持它,我认为Matz并不打算将它添加到语言中…… Ruby真的在其自己的内部API中包含了duck typing ,它使Ruby成为一种非常动态和高效的语言…