Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_Ruby_Arrays - Fatal编程技术网

当添加到数组中,并尝试在创建新实例后显示内容时,它不会显示-ruby

当添加到数组中,并尝试在创建新实例后显示内容时,它不会显示-ruby,ruby,arrays,Ruby,Arrays,我对Ruby很陌生,我正试图在一本书上做一个练习 我有3个类,一个是与用户交互的菜单,另一个创建对象书籍,另一个将书籍存储到数组中,我遇到的问题是,当我添加一本书,然后询问用户是否希望继续使用菜单时,我运行menu.new并将用户返回到菜单,当我选择选项3显示数组内容时,在本例中是我存储的书籍,它不显示任何内容。我做错了什么 书 书架 您应该将bookshelf的数组成员设置为全局。那会解决你的问题 更好的方法是将菜单的成员书架设置为是,将对象设置为菜单的成员,但如果使用Menu.new,则会创

我对Ruby很陌生,我正试图在一本书上做一个练习

我有3个类,一个是与用户交互的菜单,另一个创建对象书籍,另一个将书籍存储到数组中,我遇到的问题是,当我添加一本书,然后询问用户是否希望继续使用菜单时,我运行menu.new并将用户返回到菜单,当我选择选项3显示数组内容时,在本例中是我存储的书籍,它不显示任何内容。我做错了什么

书架


您应该将bookshelf的数组成员设置为全局。那会解决你的问题

更好的方法是将菜单的成员书架设置为是,将对象设置为菜单的成员,但如果使用Menu.new,则会创建一个新实例,从而销毁该书架成员。因此,这里有两种选择:

当您要求用户返回菜单并始终使用同一菜单时,不要破坏该菜单或初始化新菜单。我会怎么做。 将该书架成员也设置为全局。
您的代码有几个问题。我会一次报道一个

您的直接问题是您正在从while循环中调用Menu.new。这意味着每次用户想要返回菜单并按yes键时,您都会得到一个全新的菜单和一个全新的书架。您可能应该一遍又一遍地重复菜单,因此使用while循环,而不是每次都询问用户是否要返回菜单,因为您的菜单有一个退出选项,尽管您尚未对其进行编码

下面是一个简单的例子:

# ... display menu
# Let's say choice 5 is 'Exit'
choice = gets.chomp
until choice == "5" 

# case statement that does something for options 1 - 4

end

# Then end the method which means once use picks "5", the menu closes
主要问题是在菜单类定义的末尾调用Menu.new。请记住,类的定义只是类的实际实例的蓝图。当你为一所房子绘制蓝图时,蓝图并不能建造房子。建设者建造房子

您的代码应该是这样的:

class Menu
    # code
end

myMenu = Menu.new
您可以从initialize方法调用method菜单,但是最好在方法之外调用它。让建筑商决定他是想先修墙还是先修地板。因此:

myMenu = Menu.new
myMenu.menu

这将帮助你解决一些问题,并帮助你进一步学习。我试图尽可能地缩短这个时间,因为它有机会成为一个非常广泛的讨论

把你的分类放在帖子里,不要放在评论里。在你的帖子部分。。还有很多空间留给你。我想,搞定了,呵呵,对不起,我在stackoverflowNo上的第一篇帖子,我很担心,@danielbenson。每个人都有自己的第一个帖子。重要的是你愿意学习什么是一个好的职位。你似乎是一个愿意的人!是的,我是,在过去的两个月里我一直在自学ruby,它很棒!,只是我遇到了这堵墙,这节课的练习我无法完成。这与你的问题无关,但你在第三种情况下的GET语句选项需要在结尾处用.chomp。非常感谢Charles!这就解决了!我在菜单课一开始就安排了晚餐,结果成功了!另外,我将按照您关于最佳实践的建议,从我的菜单类中删除初始化,只定义菜单类并使用.Menu方法加载菜单,谢谢!
# ... display menu
# Let's say choice 5 is 'Exit'
choice = gets.chomp
until choice == "5" 

# case statement that does something for options 1 - 4

end

# Then end the method which means once use picks "5", the menu closes
class Menu
    # code
end

myMenu = Menu.new
myMenu = Menu.new
myMenu.menu