gpt4 book ai didi

ruby - 加载 'file.rb' 与在 Ruby 中需要 'Module'

转载 作者:数据小太阳 更新时间:2023-10-29 08:27:29 25 4
gpt4 key购买 nike

我对 load 'file.rb'require 'Module' 之间的区别感到困惑。在 Learn Ruby the Hard Way ,如何使用一个模块的例子是用两个文件(mystuff.rbapple.rb)设置的:

我的东西.rb

module MyStuff
def MyStuff.apple()
puts "I AM APPLES!"
end
end

苹果.rb

require 'mystuff'

MyStuff.apple()

但是,当我在 Sublime Text 控制台中或使用 ruby apple.rb 运行 apple.rb 时,我收到了一个加载错误。我也尝试过 require 'MyStuff'require 'mystuff.rb',但我仍然遇到 Load Error

因此,我将 apple.rb 的第一行切换为 load 'mystuff.rb',这样它就可以运行了。但是,如果我将 'mystuff.rb' 编辑为 class MyStuff 的定义而不是 module MyStuff,则没有区别。

作为引用,加载错误是:/Users/David/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in require': 不能加载这样的文件 -- mystuff (LoadError)`

我查看了 kernel_require.rb 并查看了 require 定义,但由于我是 Ruby Nuby(实际上是编程新手),它是有点压倒性。由于从 2012 年 10 月 5 日起就没有更新过 Learn Ruby the Hard Way,因此可能对模块进行了一些语法更改。是吗?

最佳答案

require 搜索预定义的目录列表,如 What are the paths that "require" looks up by default? 中所述。 .它失败了,因为它无法在任何这些目录中找到 mystuff.rb

另一方面,

load 将在当前目录中查找文件。

至于:

However, if I edit 'mystuff.rb' to be a definition of class MyStuff as opposed to a module MyStuff, there is no difference.

我不确定我是否理解您所说的“无差异”是什么意思。如果您的意思是 requireload 分别继续失败和成功,那是有道理的,因为 require 失败与内容无关无论 Mystuff 是类还是普通模块,文件内容和您正在测试的代码的行为都相同。

关于ruby - 加载 'file.rb' 与在 Ruby 中需要 'Module',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20927771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com