PHP 示例:
function do_something(int $i) {
return $i + 2;
}
红宝石示例:
class MyClass
# ...
end
def do_something(MyClass x)
x.prop1 = "String..."
end
有没有类似的东西?谢谢。
PHP 示例:
function do_something(int $i) {
return $i + 2;
}
红宝石示例:
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
无耻的插件 - 我刚刚为此发布了一个 ruby gem - http://rubygems.org/gems/type_hinting
用法在这里 - https://github.com/beezee/ruby_type_hinting
我先去寻找它并找到了这个线程。找不到我要找的东西,所以我写了它并想在这里分享。
我认为它比这里提出的任何解决方案都更简洁,并且还允许您指定方法的返回类型。
不,Ruby 本身不支持它,我认为这不是 Matz 将它添加到语言中的意图...... Ruby 确实在其内部 API 中包含鸭子类型,它使 Ruby 成为一种非常动态和高效的语言...