2011-06-22 7 views
12

ルビでオプションの値をモデル化するにはどうすればよいですか? Scalaにはオプション[]があります。これは私がルビーで探しているものです。Scala Optionに相当するルビはありますか?

+0

オプションの値は何ですか? –

+0

ルモネードの宝石には、ルビのスカラのようなオプションがあります:https://github.com/ms-ati/rumonade –

+0

また、Scalaのオプション - https://と同等のMaybeモナドを実装したモナドの宝石をチェックすることもできます。 //github.com/pzol/monadic –

答えて

5

標準ライブラリには相当するものはありません。自分で定義する必要があります。 this articleを参照してください。

+0

それは私が恐れていたものです。あなた自身の作品をうまく定義することはできますが、ライブラリ/ bulitinを使用する方が簡単です。ありがとうございました。 – ladrl

+0

あなたはそれを必要とすべきではありませんhttp://stackoverflow.com/questions/5839697/why-is-the-use-of-maybe-option-not-so-pervasive-in-clojure – OscarRyz

+2

@OscarRyz:私は同意します型は高次プログラミングの重要な側面ですが、型なしで高次プログラミングを行うことは完全に可能であり、もっともらしくあります。型はここで_mandatory_要素ではありません。 Monadsは、静的言語と動的言語の両方に関係します(優れた例としてClojureのminikanrenを参照してください)。オプションはモナドです。優れた型安全性を提供することとは別に、定型文を切り捨てるなど、いくつかの利点があります。同時に、すべての可能なケースが処理されているという保証を提供します。 [..] – missingfaktor

-8

私はスカラ座を知らないので、私はそれがあなたの答えだ断言することはできません: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。

+1

これは 'Option'モナドのためのものではありません。 – missingfaktor

+0

それは危険だった...正確にありがとう:) – ook

4

私はRubyのエキスパートではありませんが、私はそれに相当するOptionはないと思います。 Rubyはオブジェクト指向であるため、独自の実装を作成することを止めるものはありませんが、コンパイラがを強制的に使用する静的型言語と同じくらい有用ではありません。空のオプションこの構造を使用するための主なポイントのもちろん、オプション値をいくつかの方法で連結する可能性など、他の利点もあります。

2

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"] 
1

nkpartのadt libraryexamples/common_adts.rb下でMaybeクラスの例があります。他にもADTの例があり、ライブラリで独自の定義を簡単に行うことができます。

0

nil_be_goneという名前の宝石をプッシュしました。オブジェクトをラップできるオプションがあります。 Optionalの値がnilであるかどうかを調べるmethod_missingを実装しています。そうでなければ、別のオプションのラップnil値を返します。それ以外の場合は、オブジェクトのメソッドを呼び出して再びラップします。

nil_be_gone器具はbind任意のタイプのチェーンオペレーションにあなたを可能and_thenとしては、任意の値とモナドのオブジェクトがself.from_valueによって定義されたラップ単位操作であるから値を取得し返すメソッドをです。

関連する問題