README syntax highlight

This commit is contained in:
Sebastián Moreno 2014-04-11 22:31:42 -03:00
parent a8a8298a4c
commit bff8fad299

View File

@ -8,29 +8,31 @@ A simple OOP library for Lua. It has inheritance, metamethods (operators), class
Quick Look Quick Look
========== ==========
local class = require 'middleclass' ```lua
local class = require 'middleclass'
local Fruit = class('Fruit') -- 'Fruit' is the class' name local Fruit = class('Fruit') -- 'Fruit' is the class' name
function Fruit:initialize(sweetness) function Fruit:initialize(sweetness)
self.sweetness = sweetness self.sweetness = sweetness
end end
Fruit.static.sweetness_threshold = 5 -- class variable (also admits methods) Fruit.static.sweetness_threshold = 5 -- class variable (also admits methods)
function Fruit:isSweet() function Fruit:isSweet()
return self.sweetness > Fruit.sweetness_threshold return self.sweetness > Fruit.sweetness_threshold
end end
local Lemon = class('Lemon', Fruit) -- subclassing local Lemon = class('Lemon', Fruit) -- subclassing
function Lemon:initialize() function Lemon:initialize()
Fruit.initialize(self, 1) -- invoking the superclass' initializer Fruit.initialize(self, 1) -- invoking the superclass' initializer
end end
local lemon = Lemon:new() local lemon = Lemon:new()
print(lemon:isSweet()) -- false print(lemon:isSweet()) -- false
```
Documentation Documentation
============= =============
@ -42,22 +44,28 @@ Installation
Just copy the middleclass.lua file wherever you want it (for example on a lib/ folder). Then write this in any Lua file where you want to use it: Just copy the middleclass.lua file wherever you want it (for example on a lib/ folder). Then write this in any Lua file where you want to use it:
local class = require 'middleclass' ```lua
local class = require 'middleclass'
```
Specs Specs
===== =====
This project uses [busted](http://olivinelabs.com/busted/) for its specs. If you want to run the specs, you will have to install it first. Then just execute the following: This project uses [busted](http://olivinelabs.com/busted/) for its specs. If you want to run the specs, you will have to install it first. Then just execute the following:
cd /folder/where/the/spec/folder/is ```bash
busted cd /folder/where/the/spec/folder/is
busted
```
Performance tests Performance tests
================= =================
Middleclass also comes with a small performance test suite. Just run the following command: Middleclass also comes with a small performance test suite. Just run the following command:
lua performance/run.lua ```bash
lua performance/run.lua
```
License License
======= =======
@ -71,38 +79,45 @@ Middleclass used to expose several global variables on the main scope. It does n
`class` is now returned by `require 'middleclass'`, and it is not set globally. So you can do this: `class` is now returned by `require 'middleclass'`, and it is not set globally. So you can do this:
local class = require 'middleclass' ```lua
local MyClass = class('MyClass') -- works as before local class = require 'middleclass'
local MyClass = class('MyClass') -- works as before
```
`Object` is not a global variable any more. But you can get it from `class.Object` `Object` is not a global variable any more. But you can get it from `class.Object`
local class = require 'middleclass' ```lua
local Object = class.Object local class = require 'middleclass'
local Object = class.Object
print(Object) -- prints 'class Object' print(Object) -- prints 'class Object'
```
The public functions `instanceOf`, `subclassOf` and `includes` have been replaced by `Object.isInstanceOf`, `Object.static.isSubclassOf` and `Object.static.includes`. The public functions `instanceOf`, `subclassOf` and `includes` have been replaced by `Object.isInstanceOf`, `Object.static.isSubclassOf` and `Object.static.includes`.
Prior to 3.x: Prior to 3.x:
instanceOf(MyClass, obj) ```lua
subclassOf(Object, aClass) instanceOf(MyClass, obj)
includes(aMixin, aClass) subclassOf(Object, aClass)
includes(aMixin, aClass)
```
Since 3.x: Since 3.x:
obj:isInstanceOf(MyClass) ```lua
aClass:isSubclassOf(Object) obj:isInstanceOf(MyClass)
aClass:includes(aMixin) aClass:isSubclassOf(Object)
aClass:includes(aMixin)
```
The 3.x code snippet will throw an error if `obj` is not an object, or if `aClass` is not a class (since they will not implement `isInstanceOf`, `isSubclassOf` or `includes`). The 3.x code snippet will throw an error if `obj` is not an object, or if `aClass` is not a class (since they will not implement `isInstanceOf`, `isSubclassOf` or `includes`).
If you are unsure of whether `obj` and `aClass` are an object or a class, you can use the methods in `Object`. They are prepared to work with random types, not just classes and instances: If you are unsure of whether `obj` and `aClass` are an object or a class, you can use the methods in `Object`. They are prepared to work with random types, not just classes and instances:
Object.isInstanceOf(obj, MyClass) ```lua
Object.isSubclassOf(aClass, Object) Object.isInstanceOf(obj, MyClass)
Object.includes(aClass, aMixin) Object.isSubclassOf(aClass, Object)
Object.includes(aClass, aMixin)
```
Notice that the parameter order is not the same now as it was in 2.x. Also note the change in naming: `isInstanceOf` instead of `instanceOf`, and `isSubclassOf` instead of `subclassOf`. Notice that the parameter order is not the same now as it was in 2.x. Also note the change in naming: `isInstanceOf` instead of `instanceOf`, and `isSubclassOf` instead of `subclassOf`.