我正在使用帖子点击饥饿学院课程:http://jumpstartlab.com/news/archives/2013/09/03/scheduling-six-months-of-classes
我在这里找到的EventReporter项目:http://tutorials.jumpstartlab.com/projects/event_reporter.html
到目前为止,我已经构建了一个简单的CLI,它要求输入有效命令,并使用该命令接受其他参数。我现在只在加载功能上工作,我在listfile
的初始化方法中设置默认AttendeeList
变量时遇到了一些麻烦。这是迄今为止的代码:
require 'csv'
class Reporter
def initialize()
@command = ''
loop()
end
#Main reporter loop
def loop
while @command != 'quit' do
printf "Enter a valid command:"
user_command_input = gets.chomp
user_input_args = []
@command = user_command_input.split(" ").first.downcase
user_input_args = user_command_input.split(" ").drop(1)
#DEBUG - puts @command
#DEBUG - puts user_input_args.count
case @command
when "load"
attendee_list = AttendeeList.new(user_input_args[0])
when "help"
puts "I would print some help here."
when "queue"
puts "I will do queue operations here."
when "find"
puts "I would find something for you and queue it here."
when "quit"
puts "Quitting Now."
break
else
puts "The command is not recognized, sorry. Try load, help, queue, or find."
end
end
end
end
class AttendeeList
def initialize(listfile = "event_attendees.csv")
puts "Loaded listfile #{listfile}"
end
end
reporter = Reporter.new
我正在测试运行没有参数的load
命令,当我初始化AttendeeList
user_input_args[0]
[]
是一个空数组AttendeeList
时,我看到了理解不是零,所以我认为这是问题所在。当我希望将args传递给listfile
的新实例时,我对如何继续有点迷失。我也不想在Reporter类中包含默认逻辑,因为这样会破坏封装在列表中的目的。
编辑:我忘了提及AttendeeList
初始化方法的{{1}}默认值是我正在讨论的论点。
答案 0 :(得分:2)
您需要进行此更改:
def initialize(listfile = nil)
listfile ||= "event_attendees.csv"
puts "Loaded listfile #{listfile}"
end
事实上,user_input_args[0]
是 nil
,但nil
对默认参数值没有特殊含义。仅当调用函数时参数省略时才使用默认值。
在你的情况下:
AttendeeList.new
会按预期工作,但
AttendeeList.new(user_input_args[0])
实际上是
AttendeeList.new(nil)
且参数listfile
变为nil
。