http://hooopo.iteye.com/blog/604975
autoload可以加载(注册)任何模块的类或常量,不能有::操作符的...
特别广泛应用在如下代码结构:
-
-
-
module
Rack
-
autoload :Builder, "rack/builder"
-
autoload :Cascade, "rack/cascade"
-
autoload :Chunked, "rack/chunked"
-
autoload :CommonLogger, "rack/commonlogger"
-
autoload :ConditionalGet, "rack/conditionalget"
-
autoload :Config, "rack/config"
-
...
-
end
-
autoload本质是会调用Kernel.require,但是又和require有区别。
-
可以说autoload是一个smart的require...比require更加智能灵活。Just-in
-
Time
..
-
几个简单的例子:
-
-
要被require的文件,mylibrary.rb
-
<pre name="code"
class
=
"ruby"
>puts
"I was loaded!"
-
-
class
MyLibrary
-
end
</pre>
-
<br>require mylibrary时文件立即执行。
-
<br><pre name="code"
class
=
"irb"
>irb(main):001:0> require
'mylibrary'
-
I was loaded!
-
=> true
-
</pre>
-
<br>
-
<br>使用autoload,只有使用到需要的常量或类文件才被加载。。我们真正需要用某个文件时才加载,而require是直接加载,不管你是否会用到。
-
<br><pre name="code"
class
=
"ruby"
>irb(main):001:0> autoload :MyLibrary,
'mylibrary'
-
=> nil
-
irb(main):002:0> MyLibrary.new
-
I was loaded!
-
=>
-
<br>
-
<br>其实,我觉得require更实用一些。。预先一次性加载来的痛快嘛。。
-
<br>这个作者举了一个实例的例子来说明autoload的应用场景:<a href="http://www.subelsky.com/2008/05/using-rubys-autoload-method-to.html"
target=
"_blank"
>http://www.subelsky.com/2008/05/using-rubys-autoload-method-to.html</a>
-
<br>
-
<br>
-
<br>
-
<br>
#rack.rb
#这样的文件结构ruby源码里随处可见
module Rack
autoload :Builder, "rack/builder"
autoload :Cascade, "rack/cascade"
autoload :Chunked, "rack/chunked"
autoload :CommonLogger, "rack/commonlogger"
autoload :ConditionalGet, "rack/conditionalget"
autoload :Config, "rack/config"
...
end
autoload本质是会调用Kernel.require,但是又和require有区别。
可以说autoload是一个smart的require...比require更加智能灵活。Just-in-Time..
几个简单的例子:
要被require的文件,mylibrary.rb
-
puts
"I was loaded!"
-
-
class
MyLibrary
-
end
puts "I was loaded!"
class MyLibrary
end
require mylibrary时文件立即执行。
-
irb(main):
001
:
0
> require
'mylibrary'
-
I was loaded!
-
=> true
irb(main):001:0> require 'mylibrary'
I was loaded!
=> true
使用autoload,只有使用到需要的常量或类文件才被加载。。我们真正需要用某个文件时才加载,而require是直接加载,不管你是否会用到。
-
irb(main):001:0> autoload :MyLibrary,
'mylibrary'
-
=> nil
-
irb(main):002:0> MyLibrary.new
-
I was loaded!
-
=>
irb(main):001:0> autoload :MyLibrary, 'mylibrary'
=> nil
irb(main):002:0> MyLibrary.new
I was loaded!
=> #<MyLibrary:0x0b1jef>
其实,我觉得require更实用一些。。预先一次性加载来的痛快嘛。。
这个作者举了一个实例的例子来说明autoload的应用场景:http://www.subelsky.com/2008/05/using-rubys-autoload-method-to.html
link:http://www.rubyinside.com/ruby-techniques-revealed-autoload-1652.html
link:http://www.ruby-doc.org/core/classes/Kernel.html#M005968
link:http://www.ruby-forum.com/topic/172385
link:http://www.subelsky.com/2008/05/using-rubys-autoload-method-to.html
trap
-
trap(
"SIGINT"
)
do
-
irb.signal_handle
-
end
trap("SIGINT") do
irb.signal_handle
end
捕捉信号量。然后执行block
-
Signal.trap(0, proc { puts
"Terminating: #{$$}"
})
-
Signal.trap("CLD"
) { puts
"Child died"
}
Signal.trap(0, proc { puts "Terminating: #{$$}" })
Signal.trap("CLD") { puts "Child died" }
test:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
def
test(int_cmd, file1, file2 )
-
-
-
end
# test(int_cmd, file1 [, file2] ) => obj
#
#
# Uses the integer <i>aCmd</i> to perform various tests on
# <i>file1</i> (first table below) or on <i>file1</i> and
# <i>file2</i> (second table).
#
# File tests on a single file:
#
# Test Returns Meaning
# ?A | Time | Last access time for file1
# ?b | boolean | True if file1 is a block device
# ?c | boolean | True if file1 is a character device
# ?C | Time | Last change time for file1
# ?d | boolean | True if file1 exists and is a directory
# ?e | boolean | True if file1 exists
# ?f | boolean | True if file1 exists and is a regular file
# ?g | boolean | True if file1 has the \CF{setgid} bit
# | | set (false under NT)
# ?G | boolean | True if file1 exists and has a group
# | | ownership equal to the caller's group
# ?k | boolean | True if file1 exists and has the sticky bit set
# ?l | boolean | True if file1 exists and is a symbolic link
# ?M | Time | Last modification time for file1
# ?o | boolean | True if file1 exists and is owned by
# | | the caller's effective uid
# ?O | boolean | True if file1 exists and is owned by
# | | the caller's real uid
# ?p | boolean | True if file1 exists and is a fifo
# ?r | boolean | True if file1 is readable by the effective
# | | uid/gid of the caller
# ?R | boolean | True if file is readable by the real
# | | uid/gid of the caller
# ?s | int/nil | If file1 has nonzero size, return the size,
# | | otherwise return nil
# ?S | boolean | True if file1 exists and is a socket
# ?u | boolean | True if file1 has the setuid bit set
# ?w | boolean | True if file1 exists and is writable by
# | | the effective uid/gid
# ?W | boolean | True if file1 exists and is writable by
# | | the real uid/gid
# ?x | boolean | True if file1 exists and is executable by
# | | the effective uid/gid
# ?X | boolean | True if file1 exists and is executable by
# | | the real uid/gid
# ?z | boolean | True if file1 exists and has a zero length
#
# Tests that take two files:
#
# ?- | boolean | True if file1 and file2 are identical
# ?= | boolean | True if the modification times of file1
# | | and file2 are equal
# ?< | boolean | True if the modification time of file1
# | | is prior to that of file2
# ?> | boolean | True if the modification time of file1
# | | is after that of file2
#
#
def test(int_cmd, file1, file2 )
# This is just a stub for a builtin Ruby method.
# See the top of this file for more info.
end
-
irb(main):045:0> test(
"A"
,
"/var/log/mysql.log"
)
-
=> Fri Apr 02 10:22:46 +0800 2010
-
irb(main):046:0> test("C"
,
"/var/log/mysql.log"
)
-
=> Fri Apr 02 10:22:46 +0800 2010
-
irb(main):047:0> test("c"
,
"/var/log/mysql.log"
)
-
=> false
-
irb(main):048:0> test("e"
,
"/var/log/mysql.log"
)
-
=> true
irb(main):045:0> test("A", "/var/log/mysql.log")
=> Fri Apr 02 10:22:46 +0800 2010
irb(main):046:0> test("C", "/var/log/mysql.log")
=> Fri Apr 02 10:22:46 +0800 2010
irb(main):047:0> test("c", "/var/log/mysql.log")
=> false
irb(main):048:0> test("e", "/var/log/mysql.log")
=> true
这个可以用来调试。。很强大:
-
set_trace_func proc { |event, file, line, id, binding, classname|
-
-
set_trace_func proc { |event, file, line, id, binding, classname|
# printf "%8s %s:%-2d %10s %8s\n", event, file, line, id, classname
# }
rackuphttp://www.elanso.com/ArticleModule/sourcearticle.aspx?idx=L9IYPUNOVwLmP0KUG9SEKAIi
分享到:
相关推荐
在PHP编程中,`autoload`和`namespace`是两个非常重要的概念,它们极大地提升了代码的组织性和可维护性。本文将深入探讨这两个概念,并通过实例来帮助你更好地理解和应用它们。 首先,我们来理解`autoload`。在PHP...
在PHP编程中,`autoload`机制是一个至关重要的特性,它允许开发者在程序运行时按需加载类文件,而不是在脚本开始时一次性包含所有类。这样显著减少了代码的执行时间和资源消耗,尤其对于大型项目来说,能有效提高...
这样,你无需在每个文件顶部都使用 `require_once` 或 `include_once` 引入类文件,只需在项目中设置一次`__autoload`,就可以确保在需要时正确加载类。 二、`__autoload` 函数定义与使用 要实现`__autoload`,你...
在这个背景下,最著名且广泛使用的自动加载解决方案是Composer,它通过其自带的自动加载生成器,会根据项目中的依赖关系生成一个vendor/autoload.php文件。这个文件包含了所有需要的自动加载逻辑,并且支持PSR-0和...
在IT行业中,自动加载(Autoload)是一种常见且重要的编程机制,特别是在游戏开发领域,如Godot引擎。Godot是一个开源的游戏开发框架,它提供了一种便捷的方式来进行资源管理和脚本执行,这就是所谓的"autoload"功能...
在IT行业中,自动加载(Autoload)是一种优化代码组织和执行效率的技术,它允许程序在需要时自动引入或加载所需的类、模块或者资源,而无需显式地预先包含它们。这里的"autoload-css-js.zip"是一个压缩包,其核心是...
9. **版本控制**:压缩包中的"aota_autoload2mysql.git"表明这个项目使用了Git进行版本控制,这对于团队协作和代码历史追踪非常有用。 综上所述,"aota_autoload2mysql"项目涵盖了从Python读取文本数据、使用MySQL ...
PHP 中 spl_autoload_register() 函数用法实例详解 PHP 中的自动加载机制是指在实例化一个未定义的类时,系统自动加载该类的类文件。spl_autoload_register() 函数是 PHP 中的一个自动加载函数,用于注册自动加载...
4. 如果项目中已经实现了__autoload()函数,那么必须显式地使用spl_autoload_register('__autoload')将其加入自动加载栈中,因为spl_autoload_register()函数会将Zend Engine中的__autoload()函数取代为spl_autoload...
在上面的例子中,我们使用了匿名函数作为 spl_autoload_register() 函数的参数,该函数用于加载类文件。 spl_autoload_register() 函数的返回值是布尔值,表示注册是否成功。如果注册成功,则返回 TRUE,否则返回 ...
本文将深入探讨`spl_autoload_register()`的用法及其在实际开发中的应用。 首先,我们来看一下`__autoload`函数。在PHP5中,当尝试实例化一个未定义的类时,系统会自动调用`__autoload`函数。这个函数接受一个参数...
Ruby中的`ARGV`数组可以捕获命令行传递的参数,而`gets`方法则用于读取用户输入的控制台数据。 1. **基础架构**: 创建一个Ruby CLI工具时,首先定义一个主入口文件,例如`bin/main.rb`。在这个文件中,我们可以...
在处理数据库中的大量数据时,自动装载(AutoLoad)策略可以显著提高应用程序的性能和用户体验。 VirtualTreeview的AutoLoad机制设计为按需加载数据,即只有当用户滚动到特定节点或其子节点时,才会从数据库中加载...
在加载过程中,`spl_autoload` 首先会将 `$class_name` 转换为小写,然后在 `include_path` 中查找对应的文件。 为了使 `spl_autoload` 自动起作用,你需要使用 `spl_autoload_register` 函数。`spl_autoload_...
spl_autoload_register(PHP 5 >= 5.1.2)spl_autoload_register — 注册__autoload()函数说明bool spl_autoload_register ([ ...因为spl_autoload_register()函数会将Zend Engine中的__autoload函数取代为spl_autoload
在实际应用中,spl_autoload_register通常与require_once()一起使用,这是为了确保类文件只被加载一次,避免重复包含导致的错误。 总结来说,spl_autoload_register函数通过提供一种灵活的方式来注册自定义的自动...
至于压缩包中的文件`AutoloadWk`,这可能是包含了一个名为`Autoload`的工作目录或脚本,它可能是用来演示如何实现上述自动加载功能的代码实例。在这个文件中,可能包含了如何设置自动加载规则,以及如何组织类文件...
这是因为在spl_autoload_register()函数内部,它会将Zend引擎中原有的__autoload()函数替换为spl_autoload()或spl_autoload_call()。 至于自动加载函数的编写,通常需要编写一个能够根据类名来定位并包含类文件的...
它消除了为项目中的每个 Ruby 源代码文件手工编写autoload语句的苦差事。 它还避免了严格的约定驱动的设施(如 RubyGem提供的设施)的限制。 Autoloaded假定,但不强制,常量名和源文件之间的CamelCase -to- snake...
PHP中的autoload机制是用于自动加载类文件,解决在使用类之前必须手动加载相应文件的问题。autoload能够根据类名自动推断文件路径并加载,极大方便了开发者管理项目文件。PHP的autoload机制分为几个主要部分,首先是...