require函式
require在Lua中是载入库的更好的函式。require使用的路径和普通我们看到的路径还有些区别,我们一般见到的路径都是一个目录列表。
基本介绍
- 中文名:require函式
- 外文名:require function
lua中的require函式
Lua提供高级的require函式来载入运行库,lua中的require函式功能主要有:
1、require函式会搜寻目录载入档案
2、require会判断是否档案已经载入避免重複载入同一档案。
由于上述特徵,require的路径是一个模式列表,每一个模式指明一种由虚档案名称(require的参数)转成实档案名称的方法。更明确地说,每一个模式是一个包含可选的问号的档案名称。匹配的时候Lua会首先将问号用虚档案名称替换,然后看是否有这样的档案存在。如果不存在继续用同样的方法用第二个模式匹配。
为了确定路径,Lua首先检查全局变数LUA_PATH是否为一个字元串,如果是则认为这个串就是路径;否则require检查环境变数LUA_PATH的值,如果两个都失败require使用固定的路径(典型的"?;?.lua")
require的另一个功能是避免重複载入同一个档案两次。Lua保留一张所有已经载入的档案的列表(使用table保存)。如果一个载入的档案在表中存在require简单的返回;表中保留载入的档案的虚名,而不是实档案名称。所以如果你使用不同的虚档案名称require同一个档案两次,将会载入两次该档案。比如require "foo"和require "foo.lua",路径为"?;?.lua"将会载入foo.lua两次。我们也可以通过全局变数_LOADED访问档案名称列表,这样我们就可以判断档案是否被载入过;同样我们也可以使用一点小技巧让require载入一个档案两次。比如,require "foo"之后_LOADED["foo"]将不为nil,我们可以将其赋值为nil,require "foo.lua"将会再次载入该档案。一个路径中的模式也可以不包含问号而只是一个固定的路径。
这种情况下,require没有匹配的时候就会使用这个固定的档案(当然这个固定的路径必须放在模式列表的最后才有意义)。在require运行一个chunk以前,它定义了一个全局变数_REQUIREDNAME用来保存被required的虚档案的档案名称。我们可以通过使用这个技巧扩展require的功能。
举个极端的例子,我们可以把路径设为"/usr/local/lua/newrequire.lua",这样以后每次调用require都会运行newrequire.lua,这种情况下可以通过使用_REQUIREDNAME的值去实际载入required的档案。
php中的require
require() 语句包含并运行指定档案。
require() 语句包含并运行指定档案。有关包括如何工作的详细信息见 include() 的文档。
require() 和 include() 除了怎样处理失败之外在各方面都完全一样。include() 产生一个警告而 require() 则导致一个致命错误。换句话说,如果想在丢失档案时停止处理页面,那就别犹豫了,用 require() 吧。include() 就不是这样,脚本会继续运行。同时也要确认设定了合适的include_path。
例子 16-4. 基本的 require()例子
<?php
require 'prepend.php';
require $somefile;
require ('somefile.txt');
?>