我有一些想法,但想得到一些其他选择。这是丑陋的:
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
答案 0 :(得分:2)
不完全是特定于ruby的方法,但由于您只是在给定集合中反转布尔值,您可以将布尔值表示为变量,然后只使用一个条件来获取“借记”或“信用'字符串。
def normal_balance
debit = %w[Asset Expense].include?(type.to_s) ? !contra : contra
debit ? "Debit" : "Credit"
end
答案 1 :(得分:1)
%w[Asset Expense].include?(type.to_s) == !!contra ? "Credit" : "Debit"
!!
就是将contra
强制转换为布尔值,因此我们可以使用==
对其进行比较。它也可以写成
%w[Asset Expense].include?(type.to_s) ^ contra ? "Debit" : "Credit"
但那可读性较差,恕我直言。
答案 2 :(得分: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。也许你应该只测试它。