- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
以下是 Kernel
文档中的一些片段:
Loads and executes the Ruby program in the file filename...
Loads the given name...
我知道 require
之间存在差异和 load
例如:
require
将添加一个rb
扩展 load
不会require
会将 ruby 文件路径存储在 $LOADED_FEATURES
中又名 $"
同时load
不会require
将搜索 $LOADED_FEATURES
在 load
再次“加载”文件之前不会我想知道“加载”这个词和“执行”这个词之间的区别。
文档使它们看起来像是两个不同的东西。对我来说,“加载”意味着“嘿,我现在知道这个文件了”,而“执行”意味着“嘿,我现在知道这个文件了,我也将运行所有命令”
但我认为那是不对的。
例如,给定以下结构:
$ tree
.
├── bar.rb
├── baz.rb
└── foo.rb
0 directories, 3 files
与 foo.rb:
$LOAD_PATH << __dir__
require 'bar'
load 'baz.rb'
酒吧.rb:
puts "Inside of bar..."
baz.rb:
puts "Inside of baz..."
当我运行 foo.rb
我希望打印“Inside of baz...”而不是“Inside of bar...”,因为 load
在 require
时“加载并执行”只是“加载”。但实际上发生的是两者似乎都在“执行”:
$ ruby foo.rb
Inside of bar...
Inside of baz...
那么“加载”和“执行”ruby 文件有区别吗?
最佳答案
文件始终被执行。
在 Ruby 中,不存在加载文件而不执行文件这样的事情。在 Ruby 中,一切都是一条语句,必须被执行。甚至 class
和 def
也只是语句。
为了说明这一点,这里有一个愚蠢的例子
class Mystery < [Array, Object, String, Fixnum].sample
...
end
这将创建一个具有随机父类(super class)的类。只是为了说明 Ruby 没有声明,只有可执行语句。
所以不存在不执行 Ruby 文件这样的事情。 load
和 require
之间的区别正如您所描述的那样,后者会跟踪所有已加载的文件以避免重新加载它们。
PS,还有一个例子
ruby --dump insns -e 'def example; end'
== disasm: <RubyVM::InstructionSequence:<main>@-e>======================
0000 trace 1 ( 1)
0002 putspecialobject 1
0004 putspecialobject 2
0006 putobject :example
0008 putiseq example
0010 opt_send_without_block <callinfo!mid:core#define_method, argc:3, ARGS_SIMPLE>
0012 leave
== disasm: <RubyVM::InstructionSequence:example@-e>=====================
0000 trace 8 ( 1)
0002 putnil
0003 trace 16 ( 1)
0005 leave
如你所见def例子; end
是一条语句,内部调用define_method
方法。所以 def
只是方法调用的语法糖。
关于ruby - require 和 load wrt 到 "load"和 "execute"之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41411395/
到目前为止,我已经能够使用ssh创建一个小的脚本,并希望将单个命令传递给我正在使用的dd-wrt路由器。现在已经完成了这一步,我希望通过ssh登录多次传递同一命令,而不是仅从文本文件传递一次。 完成此
谁能帮我理解为什么下面的代码会有这样的输出: [ +/- 5.00m (speed 32.65 mps / course 294.26) @ 7/27/16, 4:34:19 AM Eastern D
在一个复杂的库或框架中,显然有时只在内部需要类来实现更高级别的功能。 通常这些内部结构与内部结构的工作方式紧密相关,因此将它们提供给用户没有意义 - 他们所能做的就是尝试篡改您的私有(private)
在 C++ 中,给定替代方案: void fun(int arg1, int arg2opt = 0); // vs. void fun(int arg1, int arg2); void fun(i
好的,这是一个抽象的算法挑战,它将保持抽象,因为它是我将要使用它的地方的最高 secret 。 假设我们有一组对象 O = {o_1, ..., o_N} 和一个对称相似度矩阵 S,其中 s_ij 是
我正在开发一些自定义应用程序,以便在DD-WRT上运行。我正在使用Linksys WRT54GL作为我的开发平台,但闪存空间有限。我想我快没地方了,但我不知道如何显示已用/可用的闪存空间。 linux
我有一个非常大的数据框,其中一些值与一个因素相关联,如下所示: value user 12 USER1 4 USER5 6 USER3 5
这个问题已经有答案了: How can I pivot a dataframe? (5 个回答) 已关闭 5 年前。 DF 说明: Pandas DF 有两列“ID”、“名称”,其中同一“ID”有多个
我正在尝试了解函数类型的变化规则。似乎他们不将输入和输出视为相同(直到对偶)。考虑这个程序。 let mk1 s = s |> Seq.iter (fun _ -> ()) // val mk1 :
我正在使用结构制作一个复数计算器,这是我的 printf 函数 printf("%d%c%di", sum.real, sign, sum.imag); 我可以一切正确,除了一件事,当 sum.ima
我正在尝试在 Swift 中实现一种发布-订阅。在我当前的情况下,有些消息仅发送给接收者,而其他消息还需要触发回调。现在,我定义了一个 enum 来保存不同的消息,例如 enum Message {
我有一个场景,我有 2 个标签需要配置。标签的名称是“Out Date”和“In Date”。我在数据库中只有一个名为“日期”的字段。它是“Out”还是“In”在运行时由枚举“Scenario”的值决
在使用正则表达式帮助解决 Python Challenge 中的问题时, 我遇到了一些让我困惑的行为。 来自 here : (...) 匹配括号内的任何正则表达式。 和 '+' 导致生成的 RE 匹配
我是 dd-wrt 固件开发的初学者。我有一个 Linksys 路由器(型号 E900)并从 dd-wrt 网站下载适用于该型号的固件以自定义此 firmware一些个人要求的网页。我知道 d
大家好,我在 Linksys EA6500 路由器上运行 DD-WRT v.3.0,并且运行以下脚本以便能够访问当前连接到路由器的 WiFi MAC 地址: echo "#!/bin/ash" > /
我有类似下面的内容。 SideTitle r1c1r1c2r2c1r2c2 我使用以下 CSS 将副标题 float 到左侧。 .sideTitle { float: left; } 这是因为边标题根
据我了解,当今大多数浏览器在建立安全连接时首先尝试 TLS,如果未建立连接,它们会回退到 SSL v3。 现在考虑以下场景:我通过 HTTPS 访问网站,该网站已停止支持 SSL v3。我的 mozi
我有一个用 Java 编写的现有解决方案,我很乐意在 OpenWrt 上运行它路由器。 OpenWrt 甚至可以在不安装大量依赖项的情况下运行 Java 吗?有人试过这个吗? 最佳答案 我从未做过,但
我正在尝试使用循环链表来解决约瑟夫斯问题。但是在创建函数中,我遇到了关于指向链表节点的 NULL 指针的段错误。谁能解释为什么会出现段错误?谢谢你! #include using namespace
我已经搜索过转置和枢轴,但找不到类似的东西。输入表: +-----+-------+-------+-------+ | TID | TP1 | TP2 | TP3 | +-----+--
我是一名优秀的程序员,十分优秀!