ルビでオプションの値をモデル化するにはどうすればよいですか? Scalaにはオプション[]があります。これは私がルビーで探しているものです。Scala Optionに相当するルビはありますか?
答えて
標準ライブラリには相当するものはありません。自分で定義する必要があります。 this articleを参照してください。
それは私が恐れていたものです。あなた自身の作品をうまく定義することはできますが、ライブラリ/ bulitinを使用する方が簡単です。ありがとうございました。 – ladrl
あなたはそれを必要とすべきではありませんhttp://stackoverflow.com/questions/5839697/why-is-the-use-of-maybe-option-not-so-pervasive-in-clojure – OscarRyz
@OscarRyz:私は同意します型は高次プログラミングの重要な側面ですが、型なしで高次プログラミングを行うことは完全に可能であり、もっともらしくあります。型はここで_mandatory_要素ではありません。 Monadsは、静的言語と動的言語の両方に関係します(優れた例としてClojureのminikanrenを参照してください)。オプションはモナドです。優れた型安全性を提供することとは別に、定型文を切り捨てるなど、いくつかの利点があります。同時に、すべての可能なケースが処理されているという保証を提供します。 [..] – missingfaktor
私はスカラ座を知らないので、私はそれがあなたの答えだ断言することはできません:Rubyで
あなたがメソッドを呼び出したとき、あなたはのparamのデフォルト値を定義することができます。
def foo(i_am_mandatory, i_am_optionnal = :banga)
puts i_am_optionnal
end
foo(:pouet, :plip)
=> :plip
foo(:pouet)
=> :banga
この例では、デフォルト値を持つi_am_optionnalを省略できます。
HTH。
これは 'Option'モナドのためのものではありません。 – missingfaktor
それは危険だった...正確にありがとう:) – ook
私はRubyのエキスパートではありませんが、私はそれに相当するOptionはないと思います。 Rubyはオブジェクト指向であるため、独自の実装を作成することを止めるものはありませんが、コンパイラがを強制的に使用する静的型言語と同じくらい有用ではありません。空のオプションこの構造を使用するための主なポイントのもちろん、オプション値をいくつかの方法で連結する可能性など、他の利点もあります。
Rumonadeの宝石をチェックしましたか?これは、スカラでモデル化されたOptionクラスを提供します。
require 'rumonade'
[nil, 1, 123].map { |v| Option(v) }
=> [None, #<Rumonade::Some:0x7f2589297768 @value=1>, #<Rumonade::Some:0x7f2589297740 @value=123>]
[nil, 1, 123].map { |v| Option(v).map { |n| n.to_s }.select { |s| s.size > 2 } }.flatten
=> ["123"]
nkpartのadt libraryexamples/common_adts.rb
下でMaybe
クラスの例があります。他にもADTの例があり、ライブラリで独自の定義を簡単に行うことができます。
nil_be_goneという名前の宝石をプッシュしました。オブジェクトをラップできるオプションがあります。 Optionalの値がnilであるかどうかを調べるmethod_missingを実装しています。そうでなければ、別のオプションのラップnil値を返します。それ以外の場合は、オブジェクトのメソッドを呼び出して再びラップします。
nil_be_gone器具はbind
任意のタイプのチェーンオペレーションにあなたを可能and_then
としては、任意の値とモナドのオブジェクトがself.from_value
によって定義されたラップ単位操作であるから値を取得し返すメソッドをです。
- 1. petapocoに相当するScalaはありますか?
- 2. ScalaのPromiseに相当するF#はありますか?
- 3. Scalaに相当するソナーレベルのコードカバレッジはありますか?
- 4. Colander/DictShield for Java/Scalaに相当するものはありますか?
- 5. Apache Commons Beanutilsに相当する純粋なScalaはありますか?
- 6. java.util.Collectionに相当するScala?
- 7. Go deferのルビに相当するものは何ですか?
- 8. Scala用のPythonのdifflib.SequenceMatcherに相当するものがあります
- 9. ScalaのOptionをOptionに変換する
- 10. ScalaのNoneに相当します。
- 11. ClearCaseにRTCに相当する「サスペンドモード」はありますか?
- 12. .NETコアに相当するGACはありますか?
- 13. STL出力イテレータに相当するC#はありますか?
- 14. Java用ソースアウトライナーに相当するものはありますか?
- 15. NSTokenFieldコントロールに相当するiPhoneはありますか?
- 16. RubyのObject#tapに相当するjQueryはありますか?
- 17. Swift/Obj-C/iOSに相当するルビーコンソールはありますか?
- 18. GWT-RPCに相当するFlexはありますか?
- 19. PHPのサブプロセスに相当するものはありますか?
- 20. WPFに相当するBitBltはありますか?
- 21. このコードに相当するSwiftコードはありますか?
- 22. Bifunctorに相当するMonoidはありますか?
- 23. XMLUnitに相当するRubyはありますか?
- 24. Uninstall-Packageに相当するnuget.exeコマンドラインはありますか?
- 25. Postgresqlテーブルに相当するDataFrames 'describe'はありますか?
- 26. EDQUOTに相当するWindowsはありますか?
- 27. GWTセルウィジェットに相当するEclipse RCPはありますか?
- 28. pythonの__getattr__メソッドに相当するjavascriptはありますか?
- 29. Docker Hubプライベートリポジトリに相当するGitHubデプロイメントキーはありますか?
- 30. プリフューズビジュアライゼーションツールキットに相当するPythonはありますか?
オプションの値は何ですか? –
ルモネードの宝石には、ルビのスカラのようなオプションがあります:https://github.com/ms-ati/rumonade –
また、Scalaのオプション - https://と同等のMaybeモナドを実装したモナドの宝石をチェックすることもできます。 //github.com/pzol/monadic –