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,陷入了死循环。
相关推荐
-
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各种选项分类列表 " 启动 -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
-
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
-
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
-
每天一个linux命令(61):wget命令详解
Linux系统中的wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,我们经常要下载一些软件或从远程服务器恢复备份到本地服务器.wget支持HTTP,HTTPS和FTP协议,可以使用HTTP代理.所谓的自动下载是指,wget可以在用户退出系统的之后在后台执行.这意味这你可以登录系统,启动一个wget下载任务,然后退出系统,wget将在后台执行直到任务完成,相对于其它大部分浏览器在下载大量数据时需要用户一直的参与,这省去了极大的麻烦. wget 可以跟踪HTML页面上
-
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 这个命令可以以递归的方式下载整站,并可以将下载的页面中的链接转换为本地链接. wget加上参数之后,即可成为相当强大的下载工具. wget命令详解 wget -r -p -np -k http://xxx.com/xxx -r, --recursive(递归) specify recursive download.(指定递归下载) -k, --convert-links(转换链接) make link
-
Linux的wget命令详解
Linux wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到本地服务器.如果我们使用虚拟主机,处理这样的事务我们只能先从远程服务器下载到我们电脑磁盘,然后再用ftp工具上传到服务器.这样既浪费时间又浪费精力,那不没办法的事.而到了Linux VPS,它则可以直接下载到服务器而不用经过上传这一步.wget工具体积小但功能完善,它支持断点下载功能,同时支持FTP和HTTP下载方式,支持代理服务器和设置起来
-
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 =
-
dos利用wget.exe让杀毒软件升级更自动化
首先感谢xhj版主为广大用户提供了杀毒软件的光盘.优盘集合,并提供了杀毒软件的升级方法.在使用杀毒软件的升级时,hxj使用windows的命令行方式提供升级,命令如下:IEXPLORE http://...,使用这个命令,需要用户指定下载的位置,很是不爽(这个winrar也一样),有没有其他的方式,只要用户一点击升级全自动呢?其实是可以做到的. wget是linux下的从网络上自动下载文件的自由工具,它支持HTTP,HTTPS和FTP协议,可以使用HTTP代理,目前已经移植到WINDOWS下.它
随机推荐
- 正则表达式详述第一部
- powerbuilder(pb)中 xml的应用一例
- mysql unix准换时间格式查找指定日期数据代码
- oracle 发送邮件 实现方法
- Java并发编程之创建线程
- 优化 JavaScript 代码的方法小结
- javascript typeof的用法与typeof运算符介绍[详细]第1/2页
- asp.net 点击按钮提交后使按钮变灰不可用
- 详细解析Python中的变量的数据类型
- php之Memcache学习笔记
- php中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
- 使用JavaScript开发IE浏览器本地插件实例
- jQuery实现简单滚动动画效果
- jQuery实现的一个自定义Placeholder属性插件
- 深入理解Java线程编程中的阻塞队列容器
- HTTP 错误 401.1 - 未经授权:访问由于凭据无效被拒绝的解决方法
- Apache SSL服务器配置SSL详解
- Nginx反斜杠自动解码问题解决方法
- Service Unavailable 原因分析
- java实现计算地理坐标之间的距离