Lua 极简指南(7)— 面向对象的编程

2014 年 10 月 31 日 by name5566 Categories: Computer Science, Lua, Programming in Lua 3rd, Reading Notes

Programming in Lua 3rd》读书笔记

在很多面向对象的语言中有类(class)的概念,对象是类的实例。Lua 中不存在类的概念。Lua 就像 JavaScript 一样是面向原型的语言(http://en.wikipedia.org/wiki/Prototype-based_programming),这类语言使用一个对象表示一个“类”,其他对象(此类的实例)使用此对象作为原型。我们有两个 table p 和 obj,将 p 设置为 obj 的原型(回顾:http://name5566.com/5017.html):

setmetatable(obj, {_[......]

继续阅读

没有评论

Lua 极简指南(6)— 模块

2014 年 10 月 30 日 by name5566 Categories: Computer Science, Lua, Programming in Lua 3rd, Reading Notes

Programming in Lua 3rd》读书笔记

从用户的角度来看,一个模块能够通过 require 加载并返回一个 table,模块导出的接口都被定义在此 table 中(此 table 被作为一个 namespace)。所有的标准库都是模块。标准库被预先加载了,就像这样:

math = require 'math'
string = require 'string'

require 函数

使用 require 函数加载模块能够避免多次重复加载模块。加载一个模块:

require 'modulename'

模块名(modulename)不那么准确[......]

继续阅读

没有评论

Lua 极简指南(5)— 环境

2014 年 10 月 28 日 by name5566 Categories: Computer Science, Lua, Programming in Lua 3rd, Reading Notes

Programming in Lua 3rd》读书笔记

全局环境

Lua 把全局变量放在一个 table _G 中,这个 table 被叫做全局环境(global environment)。打印所有的全局变量名:

for n in pairs(_G) do print(n) end

_ENV(Lua 5.2 开始支持)

对于一个 free name(名字没有绑定任何声明)var 实际上会被转换为 _ENV.var(每个 chunk 中都会存在一个名为 _ENV 的变量):

v1 = 1
local v2 = 2
print(_ENV.v1)  -->[......]

继续阅读

没有评论

Lua 极简指南(4)— Metatables

 by name5566 Categories: Computer Science, Lua

http://name5566.com/305.html

没有评论

Lua 极简指南(3)— 编译、错误

 by name5566 Categories: Computer Science, Lua, Programming in Lua 3rd, Reading Notes

Programming in Lua 3rd》读书笔记

编译

Lua 虽然是解释性语言,但 Lua 源码总是被编译为中间形式后再执行。

dofile 用于载入并执行一个 Lua 文件,相比之下,loadfile 用于载入一个 Lua 文件,但并不执行,确切的说 loadfile 编译了一个 chunk,并返回此被编译的 chunk(被作为一个函数):

c = loadfile('./test.lua')
c()

dofile 可以被实现为:

function dofile(filename)
    local f = assert(loadfile(fi[......]

继续阅读

没有评论

Lua 极简指南(2)— 函数

2014 年 10 月 24 日 by name5566 Categories: Computer Science, Lua, Programming in Lua 3rd, Reading Notes

Programming in Lua 3rd》读书笔记

Lua 和其他很多语言一样,函数调用时参数列表被包裹在括号中:

print('Hello World')

特别的情况是,如果函数调用时只有一个参数,并且此参数为字符串 literal(字面量)或者 table 构造器(constructor)时,包裹参数的括号可以省略:

print 'Hello World' <--> print('Hello World')
type{}              <--> type({})

Lua 为面向对象的调用提供了特殊的语法:

[......]

继续阅读

没有评论

Lua 极简指南(1)— 基础

2014 年 10 月 23 日 by name5566 Categories: Computer Science, Lua, Programming in Lua 3rd, Reading Notes

Programming in Lua 3rd》读书笔记

Chunks

一个 Chunk 就是一组被执行的语句,例如一个文件或者交互模式下的一行。

标识符(identifiers)

我们应该避免使用以 _ 开头并跟上一个或者多个大写字母的字符串来作标识符,它们被保留作特殊的用途(例如:_VERSION)。

注释

单行注释使用

--

多行注释使用

--[[ 和 --]]

类型简介

Lua 存在的数据类型包括:

  1. nil。此类型只有一个值 nil。用于表示“空”值。全局变量默认为 nil,删除一个已经赋值的全局变量只需要将其赋值为 nil[......]

继续阅读

没有评论

在 Golang 中使用 C 代码

2014 年 10 月 21 日 by name5566 Categories: C/C++, Computer Science, Golang

参考文献列表:
http://golang.org/cmd/cgo/

cgo 使得在 Golang 中可以使用 C 代码。

Hello World

为了有一个较为直观的了解,我们来看一个简单的例子,创建文件 main.go:

package main

/*
#include <stdio.h>

void sayHi() {
    printf("Hi");
}
*/
import "C"

func main() {
    C.sayHi()
}

执行程序:

go run main.go

程序执行并输出 hi[......]

继续阅读

没有评论

在 Golang 中使用 Protobuf

2014 年 10 月 11 日 by name5566 Categories: Computer Science, Golang

https://code.google.com/p/goprotobuf/ 项目为 Golang 提供了 Protobuf 的支持。

安装 goprotobuf

  1. https://github.com/google/protobuf/releases 获取 Protobuf 编译器 protoc(可下载到 Windows 下的二进制版本)
  2. 获取 goprotobuf 提供的 Protobuf 编译器插件 protoc-gen-go(被放置于 $GOPATH/bin 下,$GOPATH/bin 应该被加入 PATH 环境变量,以便 protoc 能够找到 protoc-gen-g[......]

继续阅读

没有评论

Linux 下安装和配置 VPN(Virtual Private Network)

2014 年 08 月 29 日 by name5566 Categories: Computer Science

了解 VPN

VPN 是 Virtual Private Network(虚拟私有网络)的缩写。所谓私有网络指的是使用私有 IP 地址空间的网络,例如企业内部建立的局域网。有些时候,我们需要通过公有网络(public network,例如 Internet)来建立私有网络,这种私有网络也就是 VPN。我们常见的 PPTP(Point-to-Point Tunneling Protocol)就是实现 VPN 的一种协议。PPTP 使用 PPP(Point-to-Point Protocol)来对数据包加密和验证,而 PPTP 本身主要用于为 PPP 提供路由支持。PPTP 不够安全,但是相关安[......]

继续阅读

一条评论