12

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

4

6 に答える 6

5

標準ライブラリには同等のものはありません。自分で定義する必要があります。この記事を参照してください。

于 2011-06-22T06:46:30.910 に答える
4

私は Ruby の専門家ではありませんが、Option に相当するものはないと思います。Ruby はオブジェクト指向であるため、独自の実装を作成することを妨げるものは何もありませんが、静的に型付けされた言語ほど有用ではありません。静的に型付けされた言語では、コンパイラが空のオプションの適切なチェックを強制します。このコンストラクトを使用するための主なポイント。もちろん、いくつかの方法で Option 値を連鎖させる可能性など、他の利点もあります。

于 2011-06-22T06:49:37.587 に答える
2

ルモネードの宝石をチェックしましたか?それはあなたにscalaでモデル化された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"]
于 2011-09-27T20:45:48.150 に答える
1

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

于 2011-09-27T23:14:07.610 に答える
-8

私は Scala を知らないので、それがあなたの答えだと断言できません。

Ruby では、メソッドを呼び出すときに、パラメーターのデフォルト値を定義できます。

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。

于 2011-06-22T06:37:55.097 に答える