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