我是第一次在Ruby中编写程序(我使用RubyMine作为我的IDE),以前主要用Java编写。
在用Java编程时,我经常在我添加的每一项功能之后“运行”我的代码,只是为了检查它是否正常工作。
我正在尝试用Ruby做到这一点,但我遇到了一些困难。
我有以下课程,我将用它作为我的程序的菜单,所以我希望用户在运行程序时开始:
class Application
# To change this template use File | Settings | File Templates.
def initialize
mainMenu
end
def navigateTo(what)
what.new.display
mainMenu
end
def mainMenu
puts "What would you like to do?
1: Add module to a scheme
2: Remove module from a scheme
3: Query modules
4: Modify module
5: Register a student on a scheme
6: Remove a student from a scheme
7: Register a student on a module
8: Remove a student from a module"
case gets.strip
when "1"
navigateTo Module
addModule
when "2"
navigateTo Module
when "3"
navigateTo Module
when "4"
navigateTo Module
when "5"
navigateTo Student
when "6"
navigateTo Student
when "7"
navigateTo Student
end
end
end
但是,当我运行该类时,控制台会显示一行说明它正在运行它,但接下来的行是“Process finished with exit code 0”
我无法解释为什么会这样?在Java中,有一个主要的方法,程序总是会在运行时指导它做什么......但据我所知,Ruby不需要主方法?如果是这种情况,我怎么能运行我目前所写的内容来检查我是否正确地写了它?
* 已更新的 **
好的,我已加入
行Application.new
按照建议,这很棒 - 菜单现在打印出来了。我从菜单中选择了选项1,这一行在控制台中打印出来:
#<Module:0x1bd2c90>What would you like to do?
然后再次打印出菜单。
选项1应导航到我的Module类,如下所示:
class Module
# To change this template use File | Settings | File Templates.
@@moduleScheme = nil
@@moduleYear = nil
#@moduleTitle = ""
def self.moduleYear
@@moduleYear
end
def initialize(v)
@val = v
end
# Set and get the @val object value
def set (v)
@val = v
end
def get
return @val
end
def addModule
moduleName = Module.new(30)
moduleRefNo = Random(100)
#moduleTitle = @moduleTitle
moduleYear(4)
print "What is the name of the module you would like to add?"
moduleName = gets
moduleRefNo
printf "Which year does the module belong to?"
@@moduleYear = gets
puts "#{moduleName}, belonging to #{@@moduleYear} has been added to the system, with reference number #{moduleRefNo}."
navigateTo Application
end
def addModuleToScheme
moduleName.moduleScheme = schemeName
end
def removeModuleFromScheme
moduleName.moduleScheme = nil
end
def queryModule
end
end
一旦用户从主菜单中选择了选项1,并且程序已导航到Module类,我希望它完全运行该类,即向用户显示提示,并读取他们输入的任何内容键盘,然后导航回菜单,如行
所示navigateTo Application
在我的'addModule'函数的末尾。但是,出于某种原因,它似乎要么不是导航到Module类,要么直接跳到它的末尾。谁能指出我在这里做错了什么?
答案 0 :(得分:3)
当您运行ruby文件时,它将从头到尾运行该文件。在你的文件中,你只是定义一个类,所以它将在ruby中创建该类,然后什么也不做,因为你没有告诉它实例化该类的实例。在文件的末尾,添加Application.new
,这将创建该类的实例,并查看您的代码,将打印并接收输入
答案 1 :(得分:0)
您的代码可能如下所示:
class Application
def run
puts "What would you like to do?
1: Add module to a scheme
...."
end
...
end
Application.new.run
# here the user will interact with you application