function do_something(int $i) {
return $i + 2;
}
ルビー例:
class MyClass
# ...
end
def do_something(MyClass x)
x.prop1 = "String..."
end
は、次のようなものはありますか?ありがとう。
function do_something(int $i) {
return $i + 2;
}
ルビー例:
class MyClass
# ...
end
def do_something(MyClass x)
x.prop1 = "String..."
end
は、次のようなものはありますか?ありがとう。
そのようなものですが、あなたがしなければならないのは、次のように1行追加するだけです。
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
yard、rdocなどのドキュメントについては、引数のクラスを指定する特別な構文があります。 – sawa
それは私が本当に笑っていた:)「あなたがしなければならないすべては、すべての関数呼び出しに各パラメータのカスタム例外を作成している」おかしいです。私はタイプヒントがないことがわかるまで、ルビーが純粋なゴミであることを知らなかった。今、私は別に美的懸念から、これはタイプヒンティングと意味的に等価ではないことを確認 – Toskan
のためにその言語を気にしません。重大なことに、これは、タイプスタイリングを可能にするタイプヒントと比較して_runtime_チェックです。私。私は、コードパスを実行することなく、すぐにすべてのコードパスをチェックすることができます。私はRubyをゴミ箱に入れようとしているわけではなく、単に実行時の型チェックが同じではないことを指摘しています。これは、完全なテストカバレッジを持つ唯一の等価です(ただ、「100%の範囲」を超えた:それはちょうどすべての構文行を打つよりもあるすべてのコードパスをテストする必要があります)。それはだ...かなり「大した」:あなたは複雑なシステムを取得し、引数が特定の実装に合わせて、必要があると述べまですべてが順調と良いのP – hraban
あなたが本当に特定のアクションを(整数のような)特定のクラスのインスタンス上で実行され、その後、特定のクラスにそのアクションを定義することを検討確認するには:
Rubyはありません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
シングルディスパッチのため、* one * "パラメータ"(受信者)にのみ有効です。 – user2246674
いいえ、ルビー自体がそれをサポートしていない、と私は考えますそれはMatzを言語に追加する意図ではありません。Rubyは実際にはduck typingを独自の内部APIに包含しており、Rubyは非常に動的で生産的な言語になっています...
。 Rubyは偉大な言語であり、実際にこのような機能を持つことができます。それはいくつかの最高のオブジェクト指向言語の素晴らしい機能です:) – Oddman
恥知らずのプラグインこれのルビーの宝石 - http://rubygems.org/gems/type_hinting
使用方法はこちら - https://github.com/beezee/ruby_type_hinting
私はまずそれを探して、このスレッドを見つけました。私が探していたものを見つけることができなかったので、私はそれを書いて、ここで分かち合うと思った。
ここで提案されているソリューションよりも簡潔であり、メソッドの戻り値の型を指定することもできます。
phpは配列とオブジェクトの型ヒントのみをサポートしています。 '(int $ i)'は残念ながら不可能です。 Btwなぜここにdownvotes? PHPデベロッパーとして私にとっては、これは面白いです – hek2mgl
何をすべき? PHPはサードパーティの拡張機能を持たないスカラー型のヒントをサポートしていません – Hast
@Hast残念ながら – hek2mgl