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

不完全是特定于 ruby​​ 的方法,但由于您只是在给定集合中的值反转布尔值,您可以将布尔值表示为变量,然后只需使用一个条件来获取“借方”或“贷方”字符串.

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"

但这不太可读,恕我直言。

于 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 回答