我在名为store
#<InitializeStore:0x007f83a39b72a0
@inventory=[
#<CreateStoreInventory:0x007f83a39b7228 @item="apples", @value=150>,
#<CreateStoreInventory:0x007f83a39b71d8 @item="bananas", @value=350>,
#<CreateStoreInventory:0x007f83a39b7188 @item="tissue paper", @value=450>,
#<CreateStoreInventory:0x007f83a39b7138 @item="soap", @value=850>
]>
现在当我尝试做:store.inventory
我应该得到一个数组。相反,我让阵列中的所有内容吐出4次。这不是我想要的。我希望能够做store.inventory并获取对象数组。
我想过将store.inventory
分配给库存数组,但它已经是一个数组......
想法?
答案 0 :(得分:0)
这取决于您InitializeStore
的实施方式。
store.inventory
实际上是store.inventory()
。它不是字段访问,而是方法调用。
其结果取决于该方法(inventory
)的实现。
答案 1 :(得分:0)
您的代码非常适合我:
require 'pp'
class InitializeStore
attr_reader :inventory
def initialize(arr)
@inventory = arr
end
end
class CreateStoreInventory
def initialize(item, value)
@item = item
@value = value
end
end
store_inventories = [
CreateStoreInventory.new('apples', 150),
CreateStoreInventory.new('bananas', 350),
CreateStoreInventory.new('tissue paper', 450),
CreateStoreInventory.new('soap', 850),
]
my_store = InitializeStore.new(store_inventories)
pp my_store.inventory
--output:--
[#<CreateStoreInventory:0x000001008423e8 @item="apples", @value=150>,
#<CreateStoreInventory:0x00000100842398 @item="bananas", @value=350>,
#<CreateStoreInventory:0x00000100842348 @item="tissue paper", @value=450>,
#<CreateStoreInventory:0x00000100842258 @item="soap", @value=850>]
1)哦,但你没有发布你的代码。调试虚构代码很难。
2)你的班级名字都错了。类名不应包含动词,例如初始化,创建。类名称是名词,例如:
require 'pp'
class Store
attr_reader :inventory
def initialize(arr)
@inventory = arr
end
end
class Product
def initialize(name, price)
@name = name
@price = price
end
end
products = [
Product.new('apples', 150),
Product.new('bananas', 350),
Product.new('tissue paper', 450),
Product.new('soap', 850),
]
my_store = Store.new(products)
pp my_store.inventory
--output:--
[#<Product:0x00000100842438 @name="apples", @price=150>,
#<Product:0x000001008423e8 @name="bananas", @price=350>,
#<Product:0x00000100842398 @name="tissue paper", @price=450>,
#<Product:0x00000100842348 @name="soap", @price=850>]
3)puts
&lt; - &gt; p
&lt; - &gt; pp
puts arr
:打印出数组中每个元素的字符串表示形式 - 后跟换行符。如果元素是一个字符串,并且它已经以换行符结尾,则puts不会添加另一个换行符。
p arr
:打印整个数组的字符串表示形式,恰好就像您在代码中指定的数组一样,例如: [1,2,3],附近有引号。
pp arr
:漂亮打印数组。与p
类似,但添加了一些格式以使输出更易于阅读。