Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ruby中使用SHOW向数组添加字符串_Ruby_Arrays_Module_Include_Require - Fatal编程技术网

在ruby中使用SHOW向数组添加字符串

在ruby中使用SHOW向数组添加字符串,ruby,arrays,module,include,require,Ruby,Arrays,Module,Include,Require,作为在线Ruby教程的一部分,我必须创建一个基于文本的游戏。一个要求是我使用require拉入另一个文件。我已经这样做了,还包括了包含方法的模块。然而,我不能产生我想要的结果。这是我的模块文件: module Inventory def Inventory.inventory(item) items = Array.new if item == "show" items.inspect else items << item

作为在线Ruby教程的一部分,我必须创建一个基于文本的游戏。一个要求是我使用
require
拉入另一个文件。我已经这样做了,还包括了包含方法的模块。然而,我不能产生我想要的结果。这是我的模块文件:

module Inventory

  def Inventory.inventory(item)

    items = Array.new

    if item == "show"
      items.inspect
    else
      items << item
    end
  end

end
模块清单
def库存。库存(项目)
items=Array.new
如果项目==“显示”
检查
其他的

items作为一个类,这将更有意义。通过这种方式,您可以将项目存储在实例变量中,该实例变量将在多次调用
add
show
等过程中保持不变。当然,您可以将此类放入单独的文件中,并且仍然包含它

class Inventory
  def initialize
    @items = []
  end

  def add(item)
    @items << item
  end

  def show
    @items.inspect
  end
end

# To use the class:
inventory = Inventory.new
inventory.add('bat')
inventory.show
# => ["bat"]
类目录
def初始化
@项目=[]
结束
def添加(项目)
@项目[“bat”]

作为一个类,这将更有意义。通过这种方式,您可以将项目存储在实例变量中,该实例变量将在多次调用
add
show
等过程中保持不变。当然,您可以将此类放入单独的文件中,并且仍然包含它

class Inventory
  def initialize
    @items = []
  end

  def add(item)
    @items << item
  end

  def show
    @items.inspect
  end
end

# To use the class:
inventory = Inventory.new
inventory.add('bat')
inventory.show
# => ["bat"]
类目录
def初始化
@项目=[]
结束
def添加(项目)
@项目[“bat”]

问题在于每次调用此方法时都会重新创建items数组,因此对于传递到数组中的内容,方法调用之间没有持久性。Dylan Markow的回答说明了如何使用实例变量在方法调用之间持久化值。

问题是每次调用此方法时都会重新创建items数组,因此在方法调用之间不会持久化传递到数组中的内容。Dylan Markow的回答说明了如何使用实例变量在方法调用之间持久化值。

如果您想使用实例方法或使用类变量,可以使用Dylan的回答

代码的问题是,每次调用
库存
时,都会初始化
局部变量

以下是一个将项目持久化到类变量中的版本:

module Inventory

  def Inventory.inventory(item)

    @@items ||= Array.new

    if item == "show"
      @@items.inspect
    else
      @@items << item
    end
  end

end

Inventory.inventory 1
Inventory.inventory 2
p Inventory.inventory 'show'

如果您想使用实例方法,或者您可以使用类变量,您可以使用Dylan的答案

代码的问题是,每次调用
库存
时,都会初始化
局部变量

以下是一个将项目持久化到类变量中的版本:

module Inventory

  def Inventory.inventory(item)

    @@items ||= Array.new

    if item == "show"
      @@items.inspect
    else
      @@items << item
    end
  end

end

Inventory.inventory 1
Inventory.inventory 2
p Inventory.inventory 'show'

看来我对类和实例变量的理解不如我想象的那样好。我练习的一部分是创建类,那么如何让这个库存类在其他类中工作呢?我使用继承吗?我被告知要不惜一切代价避免元编程。看来我对类和实例变量的理解不如我想象的那样好。我练习的一部分是创建类,那么如何让这个库存类在其他类中工作呢?我使用继承吗?我被告知要不惜一切代价避免元编程。谢谢!这起作用了。还有一些事情我不明白:为什么我需要“p”或打印库存。库存(“显示”)?为什么我们不需要打印它?为什么使用条件赋值运算符(| |=)?据我所知,如果变量还没有赋值,这个操作符会给变量赋值。但是空数组([])不被视为值吗?
| |=
是零保护。只有当它为nil时,它才会初始化
@@items
p
print
puts
用于将内容发送到标准输出。我理解p/print/puts,但我认为.inspect方法会自动将内容打印出来。每天学习新的东西。谢谢!这起作用了。还有一些事情我不明白:为什么我需要“p”或打印库存。库存(“显示”)?为什么我们不需要打印它?为什么使用条件赋值运算符(| |=)?据我所知,如果变量还没有赋值,这个操作符会给变量赋值。但是空数组([])不被视为值吗?
| |=
是零保护。只有当它为nil时,它才会初始化
@@items
p
print
puts
用于将内容发送到标准输出。我理解p/print/puts,但我认为.inspect方法会自动将内容打印出来。每天学习新的东西。