输出:<'class:List'>未初始化的常量List :: Task(NameError) 您创建了一个新列表
我认为正在发生的事情是,当我调用Task.new时,List类正在其自己的类中寻找任务方法或变量。
到目前为止,我在自己的List类中尝试使用include Task
和require Task
的过程并不顺利。我还尝试在Task类中声明List类。我还尝试使列表类成为Task类的父类。在网上进行了一些挖掘之后,我认为它是Ruby版本,甚至将PATH更改为旧的ruby版本。
class List
attr_reader :all_tasks
if __FILE__ == $PROGRAM_NAME
my_list = List.new
puts 'You have created a new list'
my_list.add(Task.new('Make breakfest'))
puts 'You added a task'
end
def initialize
@all_tasks = []
end
def add(task)
all_tasks << task
end
end
class Task
attr_reader :description
def initialize(description)
@description = description
end
end
答案 0 :(得分:0)
class List
class Task
attr_reader :description
def initialize(description)
@description = description
end
end
attr_reader :all_tasks
if __FILE__ == $PROGRAM_NAME
my_list = List.new
puts 'You have created a new list'
List::Task.new('Make breakfest')
# my_list.add(Task.new('Make breakfest'))
puts 'You added a task'
end
def initialize
@all_tasks = []
end
def add(task)
all_tasks << task
end
end
第一个问题是文件中的内容,我们尝试在实现之前调用Task
类!
您不正确呼叫Task
类my_list.add(Task.new('Make breakfest'))
正确的是List :: Task.new('Make breakfast')
答案 1 :(得分:0)
如果您提供有关类的定义位置(例如:在哪些文件中)以及如何调用/执行红宝石代码的更多信息,这可能会有所帮助。
通常,您将代码放置在lib
目录中,每个文件具有一个类并且具有强大的语义(class List
进入lib/list.rb
),但是比这稍微复杂一点
如果您想闲逛并学习红宝石的演奏,那也是完全可以理解的,您不想处理require
加载(加载)其他文件,处理依赖项以及所有(尽管与大多数其他编程语言一样,这将需要一天。
目前,这可以解决您的问题,并可以助您一臂之力:
# file name: task_list_program.rb (or anything you want)
class Task
attr_reader :description
def initialize(description)
@description = description
end
end
class List
attr_reader :all_tasks
def initialize
@all_tasks = []
end
def add(task)
all_tasks << task
end
end
# note that for playing around in a single file, you actually
# do not even need the 'if ...' part here
if __FILE__ == $PROGRAM_NAME
my_list = List.new
puts 'You have created a new list'
my_list.add(Task.new('Make breakfest'))
puts 'You added a task'
end
这里的主要“技巧”是将if __FILE__ == ...
移出类定义,因为否则(您不小心在这里处理了特殊情况),运行时在该类中评估的内容将无法执行以您期望的方式拾取和引用其他“定义”。
我希望这可以帮助您继续前进。代码示例之间的差异可能会教给您很多东西,例如关于“命名空间”(在Ruby中afaik并不是一个真正的概念),但我相信这个简短的答案足以让您入门,并且与ruby玩得开心(顺便欢迎SO的到来)!
(“执行”这样的文件:ruby task_list_program.rb
)。