In Ruby is there a way to overload the initialize constructor?

后端 未结 7 1503
死守一世寂寞
死守一世寂寞 2020-11-29 00:58

In Java you can overload constructors:

public Person(String name) {
  this.name = name;
}
public Person(String firstName, String lastName) {
   this(firstNam         


        
7条回答
  •  栀梦
    栀梦 (楼主)
    2020-11-29 01:45

    class StatementItem
      attr_reader :category, :id, :time, :amount
    
      def initialize(item)
        case item
        when Order
          initialize_with_order(item)
        when Transaction
          initialize_with_transaction(item)
        end
      end
    
      def valid?
        !(@category && @id && @time && @amount).nil?
      end
    
      private
        def initialize_with_order(order)
          return nil if order.status != 'completed'
          @category = 'order'
          @id = order.id
          @time = order.updated_at
          @amount = order.price
        end
    
        def initialize_with_transaction(transaction)
          @category = transaction.category
          @id = transaction.id
          @time = transaction.updated_at
          @amount = transaction.amount
        end
    
    end
    

提交回复
热议问题