2

私はいくつかのアイデアを持っていますが、他のいくつかのオプションを取得したいと思いました。これが醜いです:

def normal_balance
  if type.to_s == 'Asset' or type.to_s == 'Expense'
    if contra
      "Credit"
    else
      "Debit"
    end
  else
    if contra
      "Debit"
    else
      "Credit"
    end
  end
end
4

3 に答える 3

2

正確にはルビー固有の方法ではありませんが、指定されたセットの値の場合にブール値を反転しているだけなので、ブール値を変数として表し、1 つの条件を使用して「借方」または「貸方」文字列を取得できます。 .

def normal_balance
  debit = %w[Asset Expense].include?(type.to_s) ? !contra : contra
  debit ? "Debit" : "Credit"
end
于 2012-04-22T15:03:42.777 に答える
1
%w[Asset Expense].include?(type.to_s) == !!contra ? "Credit" : "Debit"

はブール値!!を強制contraするためにあるだけなので、 を使用して比較でき==ます。次のように書くこともできます。

%w[Asset Expense].include?(type.to_s) ^ contra ? "Debit" : "Credit"

しかし、それは読みにくいです、IMHO。

于 2012-04-22T15:24:06.133 に答える
0
def normal_balance(type,con)
  contra = {:yes => 'Debit'}
  contra.default= 'Credit'
  card_type = {:Asset => contra, :Expense => contra}
  card_type.default = contra

  card_type[type.to_sym][con.to_sym]
end

ifこれは主に、ハッシュを使用する代わりに使用されます。

可能な値がわからないcontraので、最初のハッシュでそれを置き換える必要があります。

実際、あなたの場合、contra_type のみをテストします。たぶん、それだけをテストする必要があります。

于 2012-04-22T15:18:11.413 に答える