Mercurial Hosting > luan
comparison website/src/manual.html.luan @ 476:cd22e4694ea3
documentation
| author | Franklin Schmidt <fschmidt@gmail.com> |
|---|---|
| date | Sun, 10 May 2015 22:41:00 -0600 |
| parents | 7ac0891718eb |
| children | eb6d90fb0b5c |
comparison
equal
deleted
inserted
replaced
| 475:7ac0891718eb | 476:cd22e4694ea3 |
|---|---|
| 86 <div margin-bottom="1em"> | 86 <div margin-bottom="1em"> |
| 87 <a href="#libs">Standard Libraries</a> | 87 <a href="#libs">Standard Libraries</a> |
| 88 <ul> | 88 <ul> |
| 89 <li><a href="#default_lib">Default Environment</a></li> | 89 <li><a href="#default_lib">Default Environment</a></li> |
| 90 <li><a href="#luan_lib">Basic Functions</a></li> | 90 <li><a href="#luan_lib">Basic Functions</a></li> |
| 91 <li><a href="#package_lib">Modules</a></li> | |
| 91 </ul> | 92 </ul> |
| 92 </div> | 93 </div> |
| 93 | 94 |
| 94 <hr/> | 95 <hr/> |
| 95 | 96 |
| 1850 <p> | 1851 <p> |
| 1851 Could be defined as: | 1852 Could be defined as: |
| 1852 | 1853 |
| 1853 <p><tt><pre> | 1854 <p><tt><pre> |
| 1854 local function require(mod_name) | 1855 local function require(mod_name) |
| 1855 return Package.load(mod_name) or <a href="#Luan.error">Luan.error</a>("module '"..mod_name.."' not found") | 1856 return <a href="#Package.load">Package.load</a>(mod_name) or <a href="#Luan.error">Luan.error</a>("module '"..mod_name.."' not found") |
| 1856 end | 1857 end |
| 1857 </pre></tt></p> | 1858 </pre></tt></p> |
| 1858 | 1859 |
| 1859 | 1860 |
| 1860 <h3 margin-top="1em"><a name="luan_lib">Basic Functions</a></h3> | 1861 <h3 margin-top="1em"><a name="luan_lib">Basic Functions</a></h3> |
| 1864 | 1865 |
| 1865 <p><tt><pre> | 1866 <p><tt><pre> |
| 1866 local Luan = require "luan:Luan" | 1867 local Luan = require "luan:Luan" |
| 1867 </pre></tt></p> | 1868 </pre></tt></p> |
| 1868 | 1869 |
| 1870 <p> | |
| 1869 The basic library provides basic functions to Luan that don't depend on other libaries. | 1871 The basic library provides basic functions to Luan that don't depend on other libaries. |
| 1870 | 1872 |
| 1871 | 1873 |
| 1872 <h4 margin-top="1em"><a name="Luan.assert"><tt>Luan.assert (v [, message])</tt></a></h4> | 1874 <h4 margin-top="1em"><a name="Luan.assert"><tt>Luan.assert (v [, message])</tt></a></h4> |
| 1873 | 1875 |
| 2084 For complete control over the output, | 2086 For complete control over the output, |
| 2085 use <a href="#pdf-string.format"><code>string.format</code></a> and <a href="#pdf-io.write"><code>io.write</code></a>. | 2087 use <a href="#pdf-string.format"><code>string.format</code></a> and <a href="#pdf-io.write"><code>io.write</code></a>. |
| 2086 | 2088 |
| 2087 | 2089 |
| 2088 | 2090 |
| 2091 <h4 margin-top="1em"><a name="Luan.range"><tt>Luan.range (start, stop [, step])</tt></a></h4> | |
| 2092 | |
| 2093 <p> | |
| 2094 Based on <a href="https://docs.python.org/2/library/functions.html#range">the Python range() function</a>, this lets one iterate through a sequence of numbers. | |
| 2095 | |
| 2096 <p> | |
| 2097 Example use: | |
| 2098 | |
| 2099 <p><tt><pre> | |
| 2100 for i in range(1,10) do | |
| 2101 Io.print("count up:",i) | |
| 2102 end | |
| 2103 for i in range(10,0,-1) do | |
| 2104 Io.print("count down:",i) | |
| 2105 end | |
| 2106 </pre></tt></p> | |
| 2107 | |
| 2108 <p> | |
| 2109 Could be defined as: | |
| 2110 | |
| 2111 <p><tt><pre> | |
| 2112 function Luan.range(start, stop, step) | |
| 2113 step = step or 1 | |
| 2114 step == 0 and Luan.error "bad argument #3 (step may not be zero)" | |
| 2115 local i = start | |
| 2116 return function() | |
| 2117 if step > 0 and i <= stop or step < 0 and i >= stop then | |
| 2118 local rtn = i | |
| 2119 i = i + step | |
| 2120 return rtn | |
| 2121 end | |
| 2122 end | |
| 2123 end | |
| 2124 </pre></tt></p> | |
| 2125 | |
| 2126 | |
| 2089 | 2127 |
| 2090 <h4 margin-top="1em"><a name="Luan.raw_equal"><tt>Luan.raw_equal (v1, v2)</tt></a></h4> | 2128 <h4 margin-top="1em"><a name="Luan.raw_equal"><tt>Luan.raw_equal (v1, v2)</tt></a></h4> |
| 2091 | 2129 |
| 2092 <p> | 2130 <p> |
| 2093 Checks whether <tt>v1</tt> is equal to <tt>v2</tt>, | 2131 Checks whether <tt>v1</tt> is equal to <tt>v2</tt>, |
| 2123 without invoking any metamethod. | 2161 without invoking any metamethod. |
| 2124 <tt>table</tt> must be a table, | 2162 <tt>table</tt> must be a table, |
| 2125 <tt>index</tt> any value different from <b>nil</b>, | 2163 <tt>index</tt> any value different from <b>nil</b>, |
| 2126 and <tt>value</tt> any Lua value. | 2164 and <tt>value</tt> any Lua value. |
| 2127 | 2165 |
| 2128 | |
| 2129 <p> | 2166 <p> |
| 2130 This function returns <tt>table</tt>. | 2167 This function returns <tt>table</tt>. |
| 2131 | |
| 2132 | |
| 2133 | |
| 2134 | |
| 2135 <p> | |
| 2136 <hr><h3><a name="pdf-select"><code>select (index, ···)</code></a></h3> | |
| 2137 | |
| 2138 | |
| 2139 <p> | |
| 2140 If <code>index</code> is a number, | |
| 2141 returns all arguments after argument number <code>index</code>; | |
| 2142 a negative number indexes from the end (-1 is the last argument). | |
| 2143 Otherwise, <code>index</code> must be the string <code>"#"</code>, | |
| 2144 and <code>select</code> returns the total number of extra arguments it received. | |
| 2145 | |
| 2146 | |
| 2147 | 2168 |
| 2148 | 2169 |
| 2149 <h4 margin-top="1em"><a name="Luan.set_metatable"><tt>Luan.set_metatable (table, metatable)</tt></a></h4> | 2170 <h4 margin-top="1em"><a name="Luan.set_metatable"><tt>Luan.set_metatable (table, metatable)</tt></a></h4> |
| 2150 | 2171 |
| 2151 <p> | 2172 <p> |
| 2204 <p> | 2225 <p> |
| 2205 If the metatable of <tt>v</tt> has a <tt>"__to_string"</tt> field, | 2226 If the metatable of <tt>v</tt> has a <tt>"__to_string"</tt> field, |
| 2206 then <tt>to_string</tt> calls the corresponding value | 2227 then <tt>to_string</tt> calls the corresponding value |
| 2207 with <tt>v</tt> as argument, | 2228 with <tt>v</tt> as argument, |
| 2208 and uses the result of the call as its result. | 2229 and uses the result of the call as its result. |
| 2230 | |
| 2231 | |
| 2232 | |
| 2233 <h4 margin-top="1em"><a name="Luan.try"><tt>Luan.try (t)</tt></a></h4> | |
| 2234 | |
| 2235 <p> | |
| 2236 Implements try-catch as found in other languages where each block is in table <tt>t</tt>. | |
| 2237 | |
| 2238 <p> | |
| 2239 Example use: | |
| 2240 | |
| 2241 <p><tt><pre> | |
| 2242 try { | |
| 2243 function() | |
| 2244 a_dangerous_fn() | |
| 2245 end; | |
| 2246 catch = function(e) | |
| 2247 -- handle error | |
| 2248 end; | |
| 2249 finally = function() | |
| 2250 -- clean up | |
| 2251 end; | |
| 2252 } | |
| 2253 </pre></tt></p> | |
| 2209 | 2254 |
| 2210 | 2255 |
| 2211 | 2256 |
| 2212 <h4 margin-top="1em"><a name="Luan.type"><tt>Luan.type (v)</tt></a></h4> | 2257 <h4 margin-top="1em"><a name="Luan.type"><tt>Luan.type (v)</tt></a></h4> |
| 2213 | 2258 |
| 2222 "<tt>table</tt>", | 2267 "<tt>table</tt>", |
| 2223 "<tt>function</tt>", | 2268 "<tt>function</tt>", |
| 2224 and "<tt>userdata</tt>". | 2269 and "<tt>userdata</tt>". |
| 2225 | 2270 |
| 2226 | 2271 |
| 2272 <h4 margin-top="1em"><a name="Luan.values"><tt>Luan.values (···)</tt></a></h4> | |
| 2273 | |
| 2274 <p> | |
| 2275 Returns a function so that the construction | |
| 2276 | |
| 2277 <p><tt><pre> | |
| 2278 for v in Luan.values(···) do <i>body</i> end | |
| 2279 </pre></tt></p> | |
| 2280 | |
| 2281 <p> | |
| 2282 will iterate over all values of <tt>···</tt>. | |
| 2283 | |
| 2284 | |
| 2227 | 2285 |
| 2228 <h4 margin-top="1em"><a name="Luan.VERSION"><tt>Luan.VERSION</tt></a></h4> | 2286 <h4 margin-top="1em"><a name="Luan.VERSION"><tt>Luan.VERSION</tt></a></h4> |
| 2229 | 2287 |
| 2230 <p> | 2288 <p> |
| 2231 A global variable (not a function) that | 2289 A global variable (not a function) that |
| 2235 | 2293 |
| 2236 | 2294 |
| 2237 | 2295 |
| 2238 | 2296 |
| 2239 | 2297 |
| 2240 | 2298 <h3 margin-top="1em"><a name="package_lib">Modules</a></h3> |
| 2241 <h2>6.3 – <a name="6.3">Modules</a></h2> | 2299 |
| 2300 <p> | |
| 2301 Include this library by: | |
| 2302 | |
| 2303 <p><tt><pre> | |
| 2304 local Package = require "luan:Package" | |
| 2305 </pre></tt></p> | |
| 2242 | 2306 |
| 2243 <p> | 2307 <p> |
| 2244 The package library provides basic | 2308 The package library provides basic |
| 2245 facilities for loading modules in Lua. | 2309 facilities for loading modules in Luan. |
| 2246 It exports one function directly in the global environment: | 2310 |
| 2247 <a href="#pdf-require"><code>require</code></a>. | 2311 |
| 2248 Everything else is exported in a table <a name="pdf-package"><code>package</code></a>. | 2312 <h4 margin-top="1em"><a name="Package.load"><tt>Package.load (mod_uri)</tt></a></h4> |
| 2249 | |
| 2250 | |
| 2251 <p> | |
| 2252 <hr><h3><a name="pdf-require"><code>require (modname)</code></a></h3> | |
| 2253 | |
| 2254 | 2313 |
| 2255 <p> | 2314 <p> |
| 2256 Loads the given module. | 2315 Loads the given module. |
| 2257 The function starts by looking into the <a href="#pdf-package.loaded"><code>package.loaded</code></a> table | 2316 The function starts by looking into the <a href="#Package.loaded"><tt>Package.loaded</tt></a> table |
| 2258 to determine whether <code>modname</code> is already loaded. | 2317 to determine whether <tt>mod_uri</tt> is already loaded. |
| 2259 If it is, then <code>require</code> returns the value stored | 2318 If it is, then <tt>Package.load</tt> returns the value stored |
| 2260 at <code>package.loaded[modname]</code>. | 2319 at <tt>Package.loaded[mod_uri]</tt>. |
| 2261 Otherwise, it tries to find a <em>loader</em> for the module. | 2320 Otherwise, it tries to load a new value for the module. |
| 2262 | 2321 |
| 2263 | 2322 <p> |
| 2264 <p> | 2323 To load a new value, <tt>Package.load</tt> first checks if <tt>mod_uri</tt> starts with "<b>java:</b>". If yes, then this is a Java class which is loaded by special Java code. |
| 2265 To find a loader, | 2324 |
| 2266 <code>require</code> is guided by the <a href="#pdf-package.searchers"><code>package.searchers</code></a> sequence. | 2325 <p> |
| 2267 By changing this sequence, | 2326 If <tt>mod_uri</tt> is not a Java class, then <tt>Package.load</tt> tries to read the text of the file referred to by <tt>mod_uri</tt> (using <tt>add_extension</tt>=true). If the file doesn't exist, then <tt>Package.load</tt> returns <b>nil</b>. If the file exists, then its content is compiled into a chunk calling <a href="#Luan.load"><tt>Luan.load</tt></a> and passing in an empty table as the <tt>env</tt> value. This chunk is run passing in <tt>mod_uri</tt> as an argument. If the chunk returns a value other than <b>nil</b>, then that value is the value of this module. Otherwise the <tt>env</tt> that was passed in is the value of this module. |
| 2268 we can change how <code>require</code> looks for a module. | 2327 |
| 2269 The following explanation is based on the default configuration | 2328 <p> |
| 2270 for <a href="#pdf-package.searchers"><code>package.searchers</code></a>. | 2329 If a new value for the module successful loaded, then it is stored in <tt>Package.loaded[mod_uri]</tt>. The value is returned. |
| 2271 | 2330 |
| 2272 | 2331 |
| 2273 <p> | 2332 |
| 2274 First <code>require</code> queries <code>package.preload[modname]</code>. | 2333 |
| 2275 If it has a value, | 2334 <h4 margin-top="1em"><a name="Package.loaded"><tt>Package.loaded</tt></a></h4> |
| 2276 this value (which must be a function) is the loader. | 2335 |
| 2277 Otherwise <code>require</code> searches for a Lua loader using the | 2336 |
| 2278 path stored in <a href="#pdf-package.path"><code>package.path</code></a>. | 2337 <p> |
| 2279 If that also fails, it searches for a C loader using the | 2338 A table used by <a href="#Package.load"><tt>Package.load</tt></a> to control which |
| 2280 path stored in <a href="#pdf-package.cpath"><code>package.cpath</code></a>. | |
| 2281 If that also fails, | |
| 2282 it tries an <em>all-in-one</em> loader (see <a href="#pdf-package.searchers"><code>package.searchers</code></a>). | |
| 2283 | |
| 2284 | |
| 2285 <p> | |
| 2286 Once a loader is found, | |
| 2287 <code>require</code> calls the loader with two arguments: | |
| 2288 <code>modname</code> and an extra value dependent on how it got the loader. | |
| 2289 (If the loader came from a file, | |
| 2290 this extra value is the file name.) | |
| 2291 If the loader returns any non-nil value, | |
| 2292 <code>require</code> assigns the returned value to <code>package.loaded[modname]</code>. | |
| 2293 If the loader does not return a non-nil value and | |
| 2294 has not assigned any value to <code>package.loaded[modname]</code>, | |
| 2295 then <code>require</code> assigns <b>true</b> to this entry. | |
| 2296 In any case, <code>require</code> returns the | |
| 2297 final value of <code>package.loaded[modname]</code>. | |
| 2298 | |
| 2299 | |
| 2300 <p> | |
| 2301 If there is any error loading or running the module, | |
| 2302 or if it cannot find any loader for the module, | |
| 2303 then <code>require</code> raises an error. | |
| 2304 | |
| 2305 | |
| 2306 | |
| 2307 | |
| 2308 <p> | |
| 2309 <hr><h3><a name="pdf-package.config"><code>package.config</code></a></h3> | |
| 2310 | |
| 2311 | |
| 2312 <p> | |
| 2313 A string describing some compile-time configurations for packages. | |
| 2314 This string is a sequence of lines: | |
| 2315 | |
| 2316 <ul> | |
| 2317 | |
| 2318 <li>The first line is the directory separator string. | |
| 2319 Default is '<code>\</code>' for Windows and '<code>/</code>' for all other systems.</li> | |
| 2320 | |
| 2321 <li>The second line is the character that separates templates in a path. | |
| 2322 Default is '<code>;</code>'.</li> | |
| 2323 | |
| 2324 <li>The third line is the string that marks the | |
| 2325 substitution points in a template. | |
| 2326 Default is '<code>?</code>'.</li> | |
| 2327 | |
| 2328 <li>The fourth line is a string that, in a path in Windows, | |
| 2329 is replaced by the executable's directory. | |
| 2330 Default is '<code>!</code>'.</li> | |
| 2331 | |
| 2332 <li>The fifth line is a mark to ignore all text after it | |
| 2333 when building the <code>luaopen_</code> function name. | |
| 2334 Default is '<code>-</code>'.</li> | |
| 2335 | |
| 2336 </ul> | |
| 2337 | |
| 2338 | |
| 2339 | |
| 2340 <p> | |
| 2341 <hr><h3><a name="pdf-package.cpath"><code>package.cpath</code></a></h3> | |
| 2342 | |
| 2343 | |
| 2344 <p> | |
| 2345 The path used by <a href="#pdf-require"><code>require</code></a> to search for a C loader. | |
| 2346 | |
| 2347 | |
| 2348 <p> | |
| 2349 Lua initializes the C path <a href="#pdf-package.cpath"><code>package.cpath</code></a> in the same way | |
| 2350 it initializes the Lua path <a href="#pdf-package.path"><code>package.path</code></a>, | |
| 2351 using the environment variable <a name="pdf-LUA_CPATH_5_3"><code>LUA_CPATH_5_3</code></a> | |
| 2352 or the environment variable <a name="pdf-LUA_CPATH"><code>LUA_CPATH</code></a> | |
| 2353 or a default path defined in <code>luaconf.h</code>. | |
| 2354 | |
| 2355 | |
| 2356 | |
| 2357 | |
| 2358 <p> | |
| 2359 <hr><h3><a name="pdf-package.loaded"><code>package.loaded</code></a></h3> | |
| 2360 | |
| 2361 | |
| 2362 <p> | |
| 2363 A table used by <a href="#pdf-require"><code>require</code></a> to control which | |
| 2364 modules are already loaded. | 2339 modules are already loaded. |
| 2365 When you require a module <code>modname</code> and | 2340 When you load a module <tt>mod_uri</tt> and |
| 2366 <code>package.loaded[modname]</code> is not false, | 2341 <tt>Package.loaded[modname]</tt> is not <b>nil</b>, |
| 2367 <a href="#pdf-require"><code>require</code></a> simply returns the value stored there. | 2342 <a href="#Package.load"><tt>Package.load</tt></a> simply returns the value stored there. |
| 2368 | 2343 |
| 2369 | 2344 |
| 2370 <p> | 2345 <p> |
| 2371 This variable is only a reference to the real table; | 2346 This variable is only a reference to the real table; |
| 2372 assignments to this variable do not change the | 2347 assignments to this variable do not change the |
| 2373 table used by <a href="#pdf-require"><code>require</code></a>. | 2348 table used by <a href="#Package.load"><tt>Package.load</tt></a>. |
| 2374 | |
| 2375 | |
| 2376 | |
| 2377 | |
| 2378 <p> | |
| 2379 <hr><h3><a name="pdf-package.loadlib"><code>package.loadlib (libname, funcname)</code></a></h3> | |
| 2380 | |
| 2381 | |
| 2382 <p> | |
| 2383 Dynamically links the host program with the C library <code>libname</code>. | |
| 2384 | |
| 2385 | |
| 2386 <p> | |
| 2387 If <code>funcname</code> is "<code>*</code>", | |
| 2388 then it only links with the library, | |
| 2389 making the symbols exported by the library | |
| 2390 available to other dynamically linked libraries. | |
| 2391 Otherwise, | |
| 2392 it looks for a function <code>funcname</code> inside the library | |
| 2393 and returns this function as a C function. | |
| 2394 So, <code>funcname</code> must follow the <a href="#lua_CFunction"><code>lua_CFunction</code></a> prototype | |
| 2395 (see <a href="#lua_CFunction"><code>lua_CFunction</code></a>). | |
| 2396 | |
| 2397 | |
| 2398 <p> | |
| 2399 This is a low-level function. | |
| 2400 It completely bypasses the package and module system. | |
| 2401 Unlike <a href="#pdf-require"><code>require</code></a>, | |
| 2402 it does not perform any path searching and | |
| 2403 does not automatically adds extensions. | |
| 2404 <code>libname</code> must be the complete file name of the C library, | |
| 2405 including if necessary a path and an extension. | |
| 2406 <code>funcname</code> must be the exact name exported by the C library | |
| 2407 (which may depend on the C compiler and linker used). | |
| 2408 | |
| 2409 | |
| 2410 <p> | |
| 2411 This function is not supported by Standard C. | |
| 2412 As such, it is only available on some platforms | |
| 2413 (Windows, Linux, Mac OS X, Solaris, BSD, | |
| 2414 plus other Unix systems that support the <code>dlfcn</code> standard). | |
| 2415 | |
| 2416 | |
| 2417 | |
| 2418 | |
| 2419 <p> | |
| 2420 <hr><h3><a name="pdf-package.path"><code>package.path</code></a></h3> | |
| 2421 | |
| 2422 | |
| 2423 <p> | |
| 2424 The path used by <a href="#pdf-require"><code>require</code></a> to search for a Lua loader. | |
| 2425 | |
| 2426 | |
| 2427 <p> | |
| 2428 At start-up, Lua initializes this variable with | |
| 2429 the value of the environment variable <a name="pdf-LUA_PATH_5_3"><code>LUA_PATH_5_3</code></a> or | |
| 2430 the environment variable <a name="pdf-LUA_PATH"><code>LUA_PATH</code></a> or | |
| 2431 with a default path defined in <code>luaconf.h</code>, | |
| 2432 if those environment variables are not defined. | |
| 2433 Any "<code>;;</code>" in the value of the environment variable | |
| 2434 is replaced by the default path. | |
| 2435 | |
| 2436 | |
| 2437 | |
| 2438 | |
| 2439 <p> | |
| 2440 <hr><h3><a name="pdf-package.preload"><code>package.preload</code></a></h3> | |
| 2441 | |
| 2442 | |
| 2443 <p> | |
| 2444 A table to store loaders for specific modules | |
| 2445 (see <a href="#pdf-require"><code>require</code></a>). | |
| 2446 | |
| 2447 | |
| 2448 <p> | |
| 2449 This variable is only a reference to the real table; | |
| 2450 assignments to this variable do not change the | |
| 2451 table used by <a href="#pdf-require"><code>require</code></a>. | |
| 2452 | |
| 2453 | |
| 2454 | |
| 2455 | |
| 2456 <p> | |
| 2457 <hr><h3><a name="pdf-package.searchers"><code>package.searchers</code></a></h3> | |
| 2458 | |
| 2459 | |
| 2460 <p> | |
| 2461 A table used by <a href="#pdf-require"><code>require</code></a> to control how to load modules. | |
| 2462 | |
| 2463 | |
| 2464 <p> | |
| 2465 Each entry in this table is a <em>searcher function</em>. | |
| 2466 When looking for a module, | |
| 2467 <a href="#pdf-require"><code>require</code></a> calls each of these searchers in ascending order, | |
| 2468 with the module name (the argument given to <a href="#pdf-require"><code>require</code></a>) as its | |
| 2469 sole parameter. | |
| 2470 The function can return another function (the module <em>loader</em>) | |
| 2471 plus an extra value that will be passed to that loader, | |
| 2472 or a string explaining why it did not find that module | |
| 2473 (or <b>nil</b> if it has nothing to say). | |
| 2474 | |
| 2475 | |
| 2476 <p> | |
| 2477 Lua initializes this table with four searcher functions. | |
| 2478 | |
| 2479 | |
| 2480 <p> | |
| 2481 The first searcher simply looks for a loader in the | |
| 2482 <a href="#pdf-package.preload"><code>package.preload</code></a> table. | |
| 2483 | |
| 2484 | |
| 2485 <p> | |
| 2486 The second searcher looks for a loader as a Lua library, | |
| 2487 using the path stored at <a href="#pdf-package.path"><code>package.path</code></a>. | |
| 2488 The search is done as described in function <a href="#pdf-package.searchpath"><code>package.searchpath</code></a>. | |
| 2489 | |
| 2490 | |
| 2491 <p> | |
| 2492 The third searcher looks for a loader as a C library, | |
| 2493 using the path given by the variable <a href="#pdf-package.cpath"><code>package.cpath</code></a>. | |
| 2494 Again, | |
| 2495 the search is done as described in function <a href="#pdf-package.searchpath"><code>package.searchpath</code></a>. | |
| 2496 For instance, | |
| 2497 if the C path is the string | |
| 2498 | |
| 2499 <pre> | |
| 2500 "./?.so;./?.dll;/usr/local/?/init.so" | |
| 2501 </pre><p> | |
| 2502 the searcher for module <code>foo</code> | |
| 2503 will try to open the files <code>./foo.so</code>, <code>./foo.dll</code>, | |
| 2504 and <code>/usr/local/foo/init.so</code>, in that order. | |
| 2505 Once it finds a C library, | |
| 2506 this searcher first uses a dynamic link facility to link the | |
| 2507 application with the library. | |
| 2508 Then it tries to find a C function inside the library to | |
| 2509 be used as the loader. | |
| 2510 The name of this C function is the string "<code>luaopen_</code>" | |
| 2511 concatenated with a copy of the module name where each dot | |
| 2512 is replaced by an underscore. | |
| 2513 Moreover, if the module name has a hyphen, | |
| 2514 its suffix after (and including) the first hyphen is removed. | |
| 2515 For instance, if the module name is <code>a.b.c-v2.1</code>, | |
| 2516 the function name will be <code>luaopen_a_b_c</code>. | |
| 2517 | |
| 2518 | |
| 2519 <p> | |
| 2520 The fourth searcher tries an <em>all-in-one loader</em>. | |
| 2521 It searches the C path for a library for | |
| 2522 the root name of the given module. | |
| 2523 For instance, when requiring <code>a.b.c</code>, | |
| 2524 it will search for a C library for <code>a</code>. | |
| 2525 If found, it looks into it for an open function for | |
| 2526 the submodule; | |
| 2527 in our example, that would be <code>luaopen_a_b_c</code>. | |
| 2528 With this facility, a package can pack several C submodules | |
| 2529 into one single library, | |
| 2530 with each submodule keeping its original open function. | |
| 2531 | |
| 2532 | |
| 2533 <p> | |
| 2534 All searchers except the first one (preload) return as the extra value | |
| 2535 the file name where the module was found, | |
| 2536 as returned by <a href="#pdf-package.searchpath"><code>package.searchpath</code></a>. | |
| 2537 The first searcher returns no extra value. | |
| 2538 | |
| 2539 | |
| 2540 | |
| 2541 | |
| 2542 <p> | |
| 2543 <hr><h3><a name="pdf-package.searchpath"><code>package.searchpath (name, path [, sep [, rep]])</code></a></h3> | |
| 2544 | |
| 2545 | |
| 2546 <p> | |
| 2547 Searches for the given <code>name</code> in the given <code>path</code>. | |
| 2548 | |
| 2549 | |
| 2550 <p> | |
| 2551 A path is a string containing a sequence of | |
| 2552 <em>templates</em> separated by semicolons. | |
| 2553 For each template, | |
| 2554 the function replaces each interrogation mark (if any) | |
| 2555 in the template with a copy of <code>name</code> | |
| 2556 wherein all occurrences of <code>sep</code> | |
| 2557 (a dot, by default) | |
| 2558 were replaced by <code>rep</code> | |
| 2559 (the system's directory separator, by default), | |
| 2560 and then tries to open the resulting file name. | |
| 2561 | |
| 2562 | |
| 2563 <p> | |
| 2564 For instance, if the path is the string | |
| 2565 | |
| 2566 <pre> | |
| 2567 "./?.lua;./?.lc;/usr/local/?/init.lua" | |
| 2568 </pre><p> | |
| 2569 the search for the name <code>foo.a</code> | |
| 2570 will try to open the files | |
| 2571 <code>./foo/a.lua</code>, <code>./foo/a.lc</code>, and | |
| 2572 <code>/usr/local/foo/a/init.lua</code>, in that order. | |
| 2573 | |
| 2574 | |
| 2575 <p> | |
| 2576 Returns the resulting name of the first file that it can | |
| 2577 open in read mode (after closing the file), | |
| 2578 or <b>nil</b> plus an error message if none succeeds. | |
| 2579 (This error message lists all file names it tried to open.) | |
| 2580 | |
| 2581 | 2349 |
| 2582 | 2350 |
| 2583 | 2351 |
| 2584 | 2352 |
| 2585 | 2353 |
