Lua中rawset和rawget的作用浅析
rawget是为了绕过__index而出现的,直接点,就是让__index方法的重写无效。(我这里用到"重写"二字,可能不太对,希望能得到纠正)
Window = {}
Window.prototype = {x = 0 ,y = 0 ,width = 100 ,height = 100,}
Window.mt = {}
function Window.new(o)
setmetatable(o ,Window.mt)
return o
end
Window.mt.__index = function (t ,key)
return 1000
end
Window.mt.__newindex = function (table ,key ,value)
if key == "wangbin" then
rawset(table ,"wangbin" ,"yes,i am")
end
end
w = Window.new{x = 10 ,y = 20}
print(rawget(w ,w.wangbin))
打印结果是:nil。这里的元表中__index函数就不再起作用了。
但是rawset呢,起什么作用呢?我们再来运行一段代码。
Window = {}
Window.prototype = {x = 0 ,y = 0 ,width = 100 ,height = 100,}
Window.mt = {}
function Window.new(o)
setmetatable(o ,Window.mt)
return o
end
Window.mt.__index = function (t ,key)
return 1000
end
Window.mt.__newindex = function (table ,key ,value)
table.key = "yes,i am"
end
w = Window.new{x = 10 ,y = 20}
w.wangbin = "55"
然后我们的程序就stack overflow了。可见,程序陷入了死循环。因为w.wangbin这个元素本来就不存在表中,然后这里不断执行进入__newindex,陷入了死循环。
相关推荐
-
Linux中curl命令和wget命令的使用介绍与比较
本文介绍的是Linux中curl命令和wget命令,这两者都是用来下载文件的工具,下面来看看详细的介绍: 一.wget wget是linux最常用的下载命令, 一般的使用方法是: wget + 空格 + 要下载文件的url路径 例1: wget http://www.minjieren.com/wordpress-3.1-zh_CN.zip 下载文件保存到当前目录,文件名默认是url最后一个/后面的内容,这里就是 wordpress-3.1-zh_CN.zip 例2: wget -O myfil
-
wget各种选项分类列表与下载
wget各种选项分类列表 " 启动 -V, --version 显示wget的版本后退出 -h, --help 打印语法帮助 -b, --background 启动后转入后台执行 -e, --execute=COMMAND 执行`.wgetrc'格式的命令,wgetrc格式参见/etc/wgetrc或~/.wgetrc " 记录和输入文件 -o, --output-file=F
-
Linux下模拟http的get/post请求(curl or wget)详解
Linux下模拟http的get/post请求(curl or wget)详解 背景 最近项目中需要测试接口,但是测试服务器通过堡垒机才能访问,暂时又没有通过Nginx进行转发,只好直接在Linux上模拟http请求进行测试. 方法 get请求 curl "http://www.baidu.com" 如果URL指向的是一个文件或者一幅图可以直接下载到本地 curl -i "http://www.baidu.com" 显示全部信息 curl -l "http
-
vbs结合wget 实现下载网站图片
vbs 函数过程: 1. 调用wget: 下载网站所有页面到本脚本目录 -- 2. 扫描本脚本目录中所有文件 -- 3. 读取本脚本目录中的所有网页,匹配图片 URL 地址 -- 4. 保存所有图片 URL 地址到 url-img.txt 文件 -- 5. 调用wget: 下载 url-img.txt 指定的图片到本脚本 img 目录 -- ' wget_img.vbs Call Main() Sub Main() ' CMD 模式 If Not (LCase(Right(WScript.Ful
-
PowerShell小技巧之实现文件下载(类wget)
对Linux熟悉的读者可能会对Linux通过wget下载文件有印象,这个工具功能很强大,在.NET环境下提到下载文件大多数人熟悉的是通过System.Net.WebClient进行下载,这个程序集能实现下载的功能,但是有缺陷,如果碰上类似于-/scripts/?dl=417这类的下载链接将无法正确识别文件名,下载的文件通常会被命名为dl=417这样古怪的名字,其实对应的文件名是在访问这个链接返回结果的HTTP头中包含的.事实上微软也提供了避免这些缺陷的程序集System.Net.HttpWebR
-
使用wget递归镜像网站
有时间看到别人网站的页面比较漂亮,就想给扒皮下来,学习学习.分享一个我常用网站扒皮命令wget 这个命令可以以递归的方式下载整站,并可以将下载的页面中的链接转换为本地链接. wget加上参数之后,即可成为相当强大的下载工具. wget命令详解 wget -r -p -np -k http://xxx.com/xxx -r, --recursive(递归) specify recursive download.(指定递归下载) -k, --convert-links(转换链接) make link
-
windows系统配制wget计划任务脚本
大家都知道wget在Linux.Unix下用得非常爽,在windows下建立计划任务,定时请求一个URL,wget优势就来了.我试几种方法,要么打开了浏览器,要么就弹出命令行的窗口,这非常讨厌!下面介绍一种更好的方法 1.下载wget windows版的文件 http://users.ugent.be/~bpuype/wget/2.新建一个vbe文件,在这个文件里调用bat文件3.新建一个bat文件,在这个文件使用wget4.把vbe添加到计划任务里 vbe文件 复制代码 代码如下: set w
-
apache使用.htaccess文件实现屏蔽wget下载网站内容
经发现,虽然wget遵循 robots.txt 规则,但是那个还是可以绕过去,现在把我自己使用的屏蔽方法分享给大家: 1. 屏蔽下载任何文件 .htaccess SetEnvIfNoCase User-Agent "^wget" bad_bot <Limit GET POST> Order Allow,Deny Allow from all Deny from env=bad_bot </Limit> 2. 屏蔽下载部分文件 .htaccess SetEnvIf
-
dos利用wget.exe让杀毒软件升级更自动化
首先感谢xhj版主为广大用户提供了杀毒软件的光盘.优盘集合,并提供了杀毒软件的升级方法.在使用杀毒软件的升级时,hxj使用windows的命令行方式提供升级,命令如下:IEXPLORE http://...,使用这个命令,需要用户指定下载的位置,很是不爽(这个winrar也一样),有没有其他的方式,只要用户一点击升级全自动呢?其实是可以做到的. wget是linux下的从网络上自动下载文件的自由工具,它支持HTTP,HTTPS和FTP协议,可以使用HTTP代理,目前已经移植到WINDOWS下.它
-
C语言实现类似wget的进度条效果
本文主要是类似wget的进度条的实现,实际就是转移符\r的使用,\r的作用是返回至行首而不换行 复制代码 代码如下: #include <stdio.h> #include <stdlib.h> #include <unistd.h> //类似wget的进度条的实现,实际就是转移符\r的使用,\r的作用是返回至行首而不换行 int main(int argc, char *argv[]) { unsigned len = 60; char *bar =
-
Linux的wget命令详解
Linux wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到本地服务器.如果我们使用虚拟主机,处理这样的事务我们只能先从远程服务器下载到我们电脑磁盘,然后再用ftp工具上传到服务器.这样既浪费时间又浪费精力,那不没办法的事.而到了Linux VPS,它则可以直接下载到服务器而不用经过上传这一步.wget工具体积小但功能完善,它支持断点下载功能,同时支持FTP和HTTP下载方式,支持代理服务器和设置起来
-
每天一个linux命令(61):wget命令详解
Linux系统中的wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,我们经常要下载一些软件或从远程服务器恢复备份到本地服务器.wget支持HTTP,HTTPS和FTP协议,可以使用HTTP代理.所谓的自动下载是指,wget可以在用户退出系统的之后在后台执行.这意味这你可以登录系统,启动一个wget下载任务,然后退出系统,wget将在后台执行直到任务完成,相对于其它大部分浏览器在下载大量数据时需要用户一直的参与,这省去了极大的麻烦. wget 可以跟踪HTML页面上
随机推荐
- div+css+js实现无缝滚动类似marquee无缝滚动兼容firefox
- iOS中使用正则表达式NSRegularExpression 来验证textfiled输入的内容
- js关闭父窗口时关闭子窗口
- 浅谈react.js中实现tab吸顶效果的问题
- SQL为查询的结果加上序号(ROW_NUMBER) 合并多个查询结果
- PHP CURL函数库第1/2页
- PHP验证信用卡卡号是否正确函数
- Python制作数据导入导出工具
- operator new在C++中的各种写法总结
- Android通过手势实现的缩放处理实例代码
- js判断生效时间不得大于失效时间的思路及代码
- JS检测移动端横竖屏的代码
- 基于Bootstrap的Java开发问题汇总(Spring MVC)
- 用JQUERY增删元素的代码
- js文本中搜索关键词输入效果
- 使用Sticker.js实现贴纸效果
- 详解centos7使用无线wifi连接的方法
- PHP上传文件时文件过大$_FILES为空的解决方法
- Python编程中的文件读写及相关的文件对象方法讲解
- 老生常谈ProgressBar、ProgessDialog的用法