Lua 本身是个很简练的语言,作为语言,变量似乎是比不可缺的一员。
Lua 中的变量没有类型,只管赋值即可。比如在 Lua 命令行下输入:
end_of_world = "death"
print(end_of_world)
end_of_world = 2012
print(end_of_world)
上面这四行代码 Lua 不会报错,而会输出:
death
2012
虽说变量没有类型,但并不是说数据不分类型。Lua 基本数据类型共有八个:nil
、boolean
、number
、string
、function
、userdata
、thread
、table
。
nil
就是 C/C++ 中的 NULL
,表示没有有效值。所有未定义的变量都是 nil
。
- Number 即实数,Lua 中的所有数都用双精度浮点数表示。
- Table 是很强大的数据结构,也是 Lua 中唯一的数据结构。可以看作是数组或者字典。
- Function / Userdata / Thread 目前还不是很了解 =。=
可以用 type
函数取得表达式的数据类型:
print(type(undefined_var))
print(type(true))
print(type(3.14))
print(type('Hello World'))
print(type(type))
print(type({}))
Lua 各种操作符和其它语言都是差不多的,只是有几个特殊的比较不一样,比如:
a ~= b
即 a
不等于 b
a ^ b
即 a
的 b
次方
a .. b
将 a
和 b
作为字符串连接
逻辑运算符直接就是英语的 and
or
not
三个单词。
另外 Lua 还支持多重赋值。也就是说:等号右边的值依次赋值给等号左边的变量。比如:
year, month, date = 2011, 3, 12
print(year, month, date)
于是,交换两个变量值的操作也变得非常简单:
a, b = b, a
最后,变量有局部和全局之分。加 local
修饰符的都是局部变量,否则就是全局变量。
p.s. 要从 Lua 命令行中退出,可以输入 os.exit()
或者直接 Ctrl-C
。
注意:根据官网介绍,该插件无法在 WordPress 升级后无法自动更新数据库结构。所以如果使用该插件时升级了 WordPress 并且升级需要修改数据库,那么,虽然博客依旧能够继续显示,但是你会被锁在控制面板外,无法登录。使用该插件期间如果需要升级,请参见 http://smilett.com/?p=588。
因为 VPS 内存有限,MySQL 对于我这种懒人来说优化起来又真的是很麻烦,于是在架 WordPress 的时候就用了 SQLite 数据库。于是 PDO (SQLite) For WordPress 插件就成了必需品。
但悲剧的是,这个插件本身是有不少 Bug 的,而这插件也竟然有一年没更新了 ╮(╯▽╰)╭
preg_last_error()
问题
PHP 版本小于 5.2.0 时会出现找不到 preg_last_error
函数的问题。但事实上这个函数本身只是作者用作调试用的,所以可以直接到 wp-content\pdo\driver_sqlite\pdo_sqlite_driver_create.php
把含有 preg_last_error
函数调用的那一行注释掉,问题就解决了。
安装成功后无法登录问题
悲催的我一开始被这个问题困扰了很久 =。= 原因是插件执行安装时既没有获取用户在安装页面输入的密码(这种情况下认为用户没有输入密码,系统自动生成随机密码),也没有把自动生成的随机密码输出。
解决方法是编辑 wp-content\pdo\wp_install.php
文件,把
$message = __('<strong><em>Note that password</em></strong> carefully! It is a <em>random</em> password that was generated just for you.');
替换为
$message = __($random_password . '<strong><em>Note that password</em></strong> carefully! It is a <em>random</em> password that was generated just for you.');
分类和标签消失问题
表现为分类和标签均显示为空(其实也有各种 Quick Edit 出现 PHP 错误的现象)。原因是插件的 escape
方法有问题,如 PHP 错误所说,escape
方法应该在输入为数组时返回一个数组,插件却直接:
function escape($string) {
return addslashes($string);
}
于是,解决方法是编辑 wp-content\pdo\db.php
文件,将其替换为:
function escape( $data ) {
if ( is_array( $data ) ) {
foreach ( (array) $data as $k => $v ) {
if ( is_array( $v ) )
$data[$k] = $this->escape( $v );
else
$data[$k] = $this->_weak_escape( $v );
}
} else {
$data = $this->_weak_escape( $data );
}
return $data;
}
其实本来用过一点点 Lua,不过都是需要什么功能就慢慢找 Reference Manual,这回毕业设计终于要用 Lua 写完整的东西了,于是准备把 PIL 慢慢看一遍。
首先是最简单的 Lua 为 C/C++ 程序变量赋值,类似史前的 INI 配置文件。
width = 640
height = 480
这样的赋值即设置全局变量,本质上就是在全局表中添加字段。
阅读剩余部分...
最近写毕业设计,遇到个问题:在 Debug 模式运行程序时,一按 F12 就会提示「User breakpoint called from code at 0xXXXXXXXX」,完全无视我对 F12 的按键处理 :(
经过 Google,发现微软表示,这恼人的东西其实还是一项「功能」,方便在需要时立即中断程序。擦,这不坑爹么……
要解决这个「功能」,可以打开注册表编辑器,在 HKLM\Software\Microsoft\Windows NT\CurrentVersion\AeDebug\
把 UserDebuggerHotkey
键设为非零,重启后在调试模式按 F12 就不会再触发中断了。
游戏中,主循环每一帧的一般流程概括起来是这样的:
处理输入 → 更新状态 → 绘制画面
「处理输入」就是获取键盘、鼠标、手柄等等输入设备的当前状态,然后根据这些输入设备的状态改变游戏中相应对象(不管是实体还是虚拟对象)的状态。
这里的处理按键和操作系统本身的按键消息不属于一个系统,有一个比较麻烦的就是键是可以一直按着的。假设游戏有甲乙两个画面,两个画面间可以通过按 Tab 键切换,如果在每个画面的处理输入时写:
input.tab = IsKeyDown(KEY_TAB); // input.tab 是布尔型变量
if (input.tab) {
SwitchState();
}
那么如果你按着 Tab 键,游戏就会一直在两个画面间切换,which is not what we want(好吧,这个从句用中文说感觉不像中文,那就英文写好了)。
也就是说,事实上我们需要的是边沿触发而不是电平触发(这术语是模电还是数电的来着 = =),如果API只能取得指定键是否按下的话,有一种方法就是自己来:
if (IsKeyDown(KEY_TAB)) {
input.tab++; // input.tab 是整型变量
} else {
input.tab = 0;
}
if (input.tab == 1) {
SwitchState();
}
这就是今天上网看到的一个比较顺眼的方法,虽然比较火星。以上。
- «
- 1
- ...
- 12
- 13
- 14
- 15