mirror of
https://github.com/kikito/middleclass.git
synced 2024-10-05 23:24:17 +00:00
README syntax highlight
This commit is contained in:
parent
a8a8298a4c
commit
bff8fad299
87
README.md
87
README.md
@ -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`.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user