7

私はRubyとRailsにかなり慣れていませんが、スタックオーバーフローとグーグルを検索した後でも、これに対する答えを見つけることができませんでした。

integer次のようなものを返す必要がある単純なRubyの省略形ifステートメントがあります。

# in the context of this erb document `amount` is defined as 5.
@c = ( defined? amount ? amount : r( 1,4 ) )

r()は、この場合は1と4の間の乱数を返すカスタムヘルパー関数です。

私がこれを機能させる方法はif amount、定義された後、として定義された数を使用し、1から4の間の乱数amountを生成し、代わりにそれを使用することです。else

ただし、印刷する場合、数値ではなく@cRuby出力が出力されます。expression

これを意図したとおりに機能させるには何をする必要がありますか?また、何が間違っていますか?

読んでくれてありがとう!

4

3 に答える 3

9

defined?にバインドされてamount ? amount : r(1,4)いるため、次と同等です。

defined?(amount ? amount : r(1,4))

あなたはおそらく欲しい:

defined?(amount) ? amount : r(1,4)

実際、オッズはそれであるamount || r(1,4)か、またはamount.nil? ? r(1,4) : amountあなたが望むものとよりよく一致するでしょう、なぜならあなたはこれを望まないと思うからです:

1.9.3p194:001>定義済み?(金額)
 =>nil
1.9.3p194:002>金額= nil
 =>nil
1.9.3p194:003>定義済み?(金額)
 =>「ローカル変数」

...この場合@cnil-定義された変数の値になります。

于 2012-05-06T02:01:20.410 に答える
3

||この場合、演算子を使用します。

@c = amount || r (1,4)

コードでは、defined?メソッドは意図したとおりamount ? amount : r( 1,4 )にではなく、で動作します。amountまた、defined?オペレーターはおそらくあなたが期待することをしていません。アイデアを得るためにこのブログエントリを見てください。

于 2012-05-06T02:01:50.820 に答える
2

null 合体演算子を探しています。これを試して:

@c = amount || r(1,4)

amount が定義されている場合、このコードは @c に amount を割り当てます。そうでない場合は、r(1,4) の結果を @c に代入します。

http://eddiema.ca/2010/07/07/the-null-coalescing-operator-c-ruby-js-python/

于 2012-05-06T02:06:57.203 に答える