zoukankan      html  css  js  c++  java
  • dofile, loadfile, loadstring, require, module

    1、函数dofile()和loadfile():
     dofile():读入文件编译并执行
     loadfile():编译代码成中间码,并返回编译后的chunk作为一个函数 ,而不执行代码,并且不会抛出错误信息,而是返回错误码和nil;
      另外,运行一个文件多次的话,loadfile只编译一次,但可多 次运行;dofile每次都要编译;
      dofile()本质上位辅助函数,真正实现其功能的是loadfile()
     loadstring()函数:
     他与loadfile相似,不过他读入的不是chunk,而是从一个串中读入;
     运行错误的话,也不会抛出错误,而是返回错误码和nil;
     loadstring和loadfile都不会产生边界效应,他们仅仅是编译,而不是定义chunk成为自己内部的一个匿名函数;
     lua中函数的定义是发生在运行时的赋值而不是编译;
    2、require函数:

    require 函数加载一个模块时,实际如下:
     在表package.loaded中查找是否存在,有的话就返回该值;

    加载Lua文件使用loadfile函数。loadfile会将文件当作函数来加载,require会将模块名作为参数传给该函数。若有返回值则将返回值放入表package.loaded中。若没有则返回表package.loaded中的值。
    3、module 函数:
    module “mymodule”

    ==》

    local modname = “mymodule”     – 定义模块名  
    local M = {}                               -- 定义用于返回的模块表  
    _G[modname] = M                      -- 将模块表加入到全局变量中  
    package.loaded[modname] = M    -- 将模块表加入到package.loaded中,防止多次加载  
    setfenv(1,M)                               -- 将模块表设置为函数的环境表,这使得模块中的所有操作是以在模块表中的,这样定义函数就直接定义在模块表中 

    ------利用loadfile的test.lua文件

    #!/usr/bin/lua
    F = loadfile("MyPrint.lua")
    MyPrint()    --在F()前会错误,应该在它之后,因为loadfile只是转换成中间代码,没有执行,用F()来执行之后才可以运行
    F()

    ------MyPrint.lua文件

      2 function MyPrint(...)
      3     for k, v in pairs(_G) do
      4         print("_G", v)
      5     end
      6     for k, v in pairs(arg) do
      7         print("...", v)
      8     end
      9 end
     10
     11 if _G.my then
     12     print(_G.my)
     13 end
     14
     15 print("load myprint")
     16
     17 print("1")

    --------利用require的test.lua文件

      1 #!/usr/bin/lua
      2
      3 require("MyPrint")
      4
      5 MyPrint()   --由于require相当于直接把另外一个文件的全部东西放进该文件,所以可以执行

  • 相关阅读:
    检测iphone设备是否越狱
    iphone震动提示
    单线,双线
    塔式服务器
    IPHONE锁屏控制代码
    iPhone开发之显示WiFi提示
    代码关闭程序的几种方法
    获取手机左边音量+ -按键的事件方法或私有api
    1u
    servlet在什么时候调用destroy()方法
  • 原文地址:https://www.cnblogs.com/ghost240/p/2556054.html
Copyright © 2011-2022 走看看