Ruby if条件代码简化:如何避免重复PaymentAccount.new并解决三元表达式报错
Ruby初始化方法逻辑简化方案
报错原因说明
之前三元表达式写法报错,通常是因为换行时没有将?、:放在上一行末尾,Ruby解析器会将前半部分判定为独立语句,触发语法错误。
方案1:直接改写为正确的三元表达式
def initialize(document_data) document_data.payment_accounts = document_data.compensation_currency == 'EUR' ? [PaymentAccount.new(currency: 'EUR', bank_name: 'bank name', iban: 'EU000000000000001', swift: 'EURBANK')] : [PaymentAccount.new(bank_name: 'bank name 2', iban: 'NT00000000000000', swift: 'NTBANK')] super(document_data) end
方案2:提取配置参数,彻底避免重复实例化代码(更易维护)
不需要重复写PaymentAccount.new和外层数组,后续修改账户配置只需要调整参数部分即可:
def initialize(document_data) # 三元表达式仅处理差异化参数 account_params = document_data.compensation_currency == 'EUR' ? { currency: 'EUR', bank_name: 'bank name', iban: 'EU000000000000001', swift: 'EURBANK' } : { bank_name: 'bank name 2', iban: 'NT00000000000000', swift: 'NTBANK' } # 统一执行实例化逻辑 document_data.payment_accounts = [PaymentAccount.new(account_params)] super(document_data) end
内容的提问来源于stack exchange,提问作者user1128912
相关产品推荐
相关产品推荐

