【问题标题】:Ruby file won't load for meRuby 文件不会为我加载
【发布时间】:2014-11-02 00:15:55
【问题描述】:

我正在参加编码课程,但在尝试与讲师一起编码时遇到了问题。我正在尝试学习有关 mixins 和 Enumerable 模块的部分,并制作了这个文件,就像讲师所做的那样,但它对我不起作用。到目前为止,我已经安装了 Ruby,并且已经成功地使用 RVM 来管理 Ruby 和 Rails 版本,所以我不明白为什么这对我不起作用。任何帮助都将不胜感激。

这是我在终端中遇到的错误的屏幕截图:

这是我的示例代码:

     # Enumerable as a mixin

     class ToToList
       include 'Enumerable'

       attr_accessor :items, :finished_items

       def initialize
         @items = []
       end

       def each
         items.each {|item| yield item}
       end
     end

     # list = ToToList.new
     # list.items = ['laundry', 'dishes', 'vacuum']
     # list.items.select {|i| i.length > 6}

【问题讨论】:

  • 那些错误信息有点难以阅读。你能在没有半透明终端的情况下截屏吗?或者更好的是,复制粘贴错误消息?

标签: ruby ruby-on-rails-4 irb


【解决方案1】:

我发现了问题。显然,在较新版本的 Ruby 中(我目前使用的是 Ruby v. 2.1.2 p95),include 语句中 Enumerable 周围的单引号导致它无法正常工作。在与ruby-docs 的手册协商后,我看到了这个代码示例:include Enumerable 并注意到它周围没有单引号。所以我删除了单引号,现在它可以正常工作了。

【讨论】:

  • 在 Ruby 的哪个版本中,'Enumerable' 周围的单引号有效?
  • 我不知道。我尝试做的 lynda.com 视频教程(标题为“Ruby Essentials”)中没有指定该版本,该教程已有一年多的历史,所以...
【解决方案2】:

require 将在您的$LOAD_PATH 上查找名为to_do_list.rb 的文件。如果你有一些 git repo 并且那是你项目的工作目录,它可能不会在你的 $LOAD_PATH 上。通常$LOAD_PATH 大多只有标准库的东西。

您可以使用require 将完整(绝对)路径传递给您的to_do_list.rb 文件,或者使用require_relative 并将相对于您当前位置的所述文件的路径传递给它(无论您在哪里调用irb来自)。

【讨论】:

  • 我试过那个 Amit,但它仍然不适合我。
  • 我尝试使用 require 并传递绝对路径,还尝试了另一种方式,使用 require_relative。都不适合我。
  • 如果您使用require 并传递正确的绝对路径,它应该会加载文件。您是否看到相同的错误消息?
  • 没有。我现在得到一个 TypeError: wrong argument type String (expected Module) 错误。在错误堆栈中的那个下方,我收到另一个错误说 NoMethodError: undefined method 'ruby' for Main:Object.
  • 好的,这样就解决了你原来的问题,你现在有了一个全新的问题。在完全调试代码之前,您可能会遇到一系列不同的问题,您应该针对不同的问题发布不同的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-18
  • 2011-06-08
  • 1970-01-01
  • 2020-02-01
  • 1970-01-01
  • 2018-12-23
  • 2018-05-27
相关资源
最近更新 更多