Hello all. I have two classes:
class CartItem
attr_reader :product, :quantity
def initialize(product)
@product = product
@quantity = 1
end
def increment_quantity
@quantity += 1
end
def title
@product.title
end
def price
@product.price * @quantity
end
end
class Cart
attr_reader :items
def initialize
@items = []
end
def add_product(product)
current_item = @items.find {|item| item.product == product}
if current_item
current_item.increment_quantity
end
end
end
I don’t understand, how class Cart can see method “increment_quantity”
from class CartItem?
Alex: Because Ruby is a dynamically-typed language, it doesn’t have to
“see” the method. At runtime, if current_item happens to be an object
with responds to the ‘increment_quantity’ method, then
current_item.increment_quantity will work fine.
If the object does not respond to that method, it will raise an error.
On Thu, Feb 25, 2010 at 10:09 AM, Nick B. [email protected]
wrote:
Alex: Because Ruby is a dynamically-typed language, it doesn’t have to
“see” the method. At runtime, if current_item happens to be an object
with responds to the ‘increment_quantity’ method, then
current_item.increment_quantity will work fine.
If the object does not respond to that method, it will raise an error.
And methods are public if not specified otherwise.
Nick B. wrote:
Alex: Because Ruby is a dynamically-typed language, it doesn’t have to
“see” the method. At runtime, if current_item happens to be an object
with responds to the ‘increment_quantity’ method, then
current_item.increment_quantity will work fine.
If the object does not respond to that method, it will raise an error.
And another nuby question:
What class have object “current_item”?
Alex A. wrote:
What class have object “current_item”?
In general you won’t know until you run your code, as you’ve not shown
any code which adds something to @items. For example:
cart = Cart.new
product = Flurble.new
cart.items << product
cart.add_product(product)
In this case, current_item will be of class Flurble.
Brian C. wrote:
Alex A. wrote:
What class have object “current_item”?
In general you won’t know until you run your code, as you’ve not shown
any code which adds something to @items. For example:
cart = Cart.new
product = Flurble.new
cart.items << product
cart.add_product(product)
In this case, current_item will be of class Flurble.
Yes, you’re right:
def add_product(product)
current_item = @items.find {|item| item.product == product}
if current_item
current_item.increment_quantity
else
@items << CartItem.new(product)
end
end
in my case current_item w’ll be of class “CartItem”
Thank you for reply