2

私はプログラミングの初心者で、次のifステートメントに問題があります。

if (f.year == (10 || 20 || 30 || 40 || 50 || 60 || 70 || 80 || 90 || 100 || 110 || 120)) && (f.rund != true)

最初の問題は、このコードが非常に複雑であることです。f.year実際には、が2桁の丸数字かどうかを確認したいだけです。

次に私のコードが正しく動作しません。どういうわけか、f.year等しいものだけを選択し10ます。

これらの問題を解決するにはどうすればよいですか?

4

7 に答える 7

4

Range#stepまたはを使用できますNumeric#step

(10..120).step(10).to_a  #=> [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120]

10.step(120, 10).to_a    #=> [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120]

そして呼び出すEnumerable#include?

(10..120).step(10).include? year

10.step(120, 10).include? year
于 2013-09-20T08:42:06.010 に答える
4

その理由は

(10 || 20 || 30 || 40 || 50 || 60 || 70 || 80 || 90 || 100 || 110 || 120)

式は常に に評価され10ます。

たとえば、次の方法で問題を解決できます。

(1..12).map { |el| el * 10 }.include?(f.year)

または、@AurpRakshit で提案されているように:

(1..12).map(&10.method(:*)).include?(f.year)

ここでは、この種の配列を生成する例をさらに示します。

または、 が 2 桁の数字であるかどうかを本当に確認したい場合f.yearは、次のことができます。

(10...100).include?(f.year) && f.year % 1 == 0
于 2013-09-20T08:02:04.037 に答える
2

最初のポイントに答えるには、コードは次のようになります。

if (f.year == 10 || f.year == 20 || f.year == 30 ...

f.year == (10 || 20 || 30 ...次のようにルビーによって評価されるため、式は機能しません。

  • 10 || 20 || 30 ...最初に評価される括弧の力
  • ||演算子は、真の場合は左側のオペランドを返し、それ以外の場合は右側のオペランドを返します
  • Ruby は、そうでないもの、nilまたはfalse「真」であると見なすため、式は次のように10 || 20 || 30 ...評価されます。10
  • だからあなたの表現は要約すると(f.year == 10) && (f.rund != true)
于 2013-09-20T08:00:26.607 に答える
1

あなたの質問についてはよくわかりませんが、最初の条件は次のように書くことができます

q, r = f.year.divmod(10); (1..12).include?(q) && r.zero?

また

[10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120].include?(f.year)
于 2013-09-20T08:02:08.127 に答える
0

条件はこのようには機能しません。と接続された括弧内のすべての数値は、 との等価性をチェックする前にOR評価されます。f.year

ここでのほとんどの答えは複雑すぎるようです。基本的な数学を使用して問題を解決できます。

if year % 10 == 0 && year.to_s.size == 2
   # do stuff
end

この例で%除算すると、モジュロ演算子は剰余を返します。10余りが 0 の場合は 10 の倍数です。任意の数を使用できます。モジュロ 2 は、数値が偶数かどうかをチェックします。

2 番目の部分では、桁数をチェックします。最初にそれを文字列に変換しto_s、次にその長さ、基本的にそこにある文字数をチェックします。10 を文字列に変換すると、 '10'2 文字になります。

あなたの質問は少し不明確なようです。コード例のように、100、110、120 の数字を含めますか? または、テキストに記載されているような 2 桁の数字のみが必要ですか?

于 2013-09-20T08:15:19.813 に答える