我第一次用 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
但是,当我运行该类时,控制台会显示一行说明它正在运行它,但下一行是“进程完成,退出代码为 0”
我想不通这是为什么?在 Java 中,有一个 main 方法,程序在运行时总是会在该方法中获取指令……但据我所知,Ruby 是否不需要 main 方法?如果是这种情况,我如何运行到目前为止我写的内容来检查我写的是否正确?
*更新**
好的,我已经在行中添加了
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 类,要么只是直接跳到它的末尾。谁能指出我在这里做错了什么?