Ruby`add_item':未定义的方法'>'表示nil:NilClass(NoMethodError)

问题描述 投票:0回答:1

Ruby的新手。接收错误:

item_container.rb:14:in add_item': undefined method

我知道此错误的含义,但不知道是什么原因引起的以及如何解决?进行ClassMethodsInstanceMethods和添加回调之前,一切正常。

#item_container.rb
module ItemContainer

    module ClassMethods

        def min_price
            100 
        end

    end

    module InstanceMethods

        def add_item(item)
            unless item.price < self.class.min_price #<----- error line
                @items.push item
            end
        end

    end

    def self.included(base)
        base.extend ClassMethods
        base.class_eval do 
            include InstanceMethods
        end
    end

end
#init.rb
require_relative "item_container"
require_relative "cart"
require_relative "order"
require_relative "item"
require_relative "virtual_item"
require_relative "real_item"

item1 = VirtualItem.new({ :price => 10, :name => "car" })
item2 = RealItem.new({ :price => 100, :weight => 20, :name => "kettle" })
item3 = RealItem.new({ :price=> 10, :weight => 100, :name => "dishwasher" })

cart = Cart.new
cart.add_item item1
cart.add_item item2
class Item

    @@discount = 0.05

    def self.discount
        if Time.now.month == 2
            @@discount + 0.1
        else
            @@discount 
        end
    end

    def initialize(options={})
        @real_price     = options[:price]
        @name               = options[:name]
    end

    attr_accessor :real_price
    attr_reader   :name

    def info    
        yield(price)
        yield(name)
    end

    def price
        (@real_price - @real_price * self.class.discount) + tax if @realprice
    end

    private

        def tax
            type_tax = if self.class == VirtualItem
                1
            else
                2
            end
            cost_tax = if @real_price > 5 
                @real_price * 0.2
            else
                @real_price * 0.1
            end
            cost_tax + type_tax
        end

end


ruby nomethoderror
1个回答
0
投票

你去:

def price
  (@real_price - @real_price * self.class.discount) + tax if @realprice
end

您在这里输入错字,应该是if @real_price

© www.soinside.com 2019 - 2024. All rights reserved.