当我应该在ruby中获得一个数组时,为什么我会回来4

时间:2014-08-31 16:39:51

标签: ruby

我在名为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分配给库存数组,但它已经是一个数组......

想法?

2 个答案:

答案 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类似,但添加了一些格式以使输出更易于阅读。