# Simple Educative Class Library

Also known as SECL. This is a simple implementation of classes that works, it's not commented, so it's a nice test of your lua skills.

The current version can always be found in the love-misc-libs repository

## Basic version example

    require"class"--this assumes you've saved the code above in class.lua

    myclass = class:new()
    myclass.value = 13
    function myclass:setvalue(v)
        self.value = v
    end
    object = myclass:new()
    object:setvalue(128)
    --myclass.value is still 13 and object.value is now 128
    anotherObject = object:new()
    --anotherObject.value is 128

## Advanced version example

    --NOTE: this example only contains features the basic version doesn't, if you want to see those functions see the basic example--require it here

    --create the tables/classes
    cl1 = class:new()
    cl2 = class:new()
    cl3 = {}

    --fill the tables/classes
    cl1.val1 = 12
    cl2.val2 = 24
    cl3.val3 = 48

    --create the new merged class
    merged = cl1:new()
    print(merged.val1, merged.val2, merged.val3) --> 12  nil  nil
    merged:addparent(cl2)
    print(merged.val1, merged.val2, merged.val3) --> 12  24  nil
    --remember cl3 is a normal table, not a class?
    class:convert(cl3) --converts the table in place and returns it, so you can use it in expressions
    merged:addparent(cl3) --could also be merged:addparent(class:convert(cl3))
    print(merged.val1, merged.val2, merged.val3) --> 12  24  48

    --convert is part of any class, the parent of the converted class is the class where convert is called from
    --NOTE: addparent supports multiple parents at once, the way that it's done here is to serve as an example

## Full version example

    --NOTE: This example only contains features the advanced version doesn't have--require it here

    cl1 = class() --new is implied
    cl2 = class()

    cl1.val1 = 12
    cl2.val2 = 24

    merged = cl1() + cl2 --yes, we can just add cl2 as if we were doing math
    print(merged.val1, merged.val2) --> 12  24

    if merged > cl1 then
        print("Merged is a derivative of cl1") --which it is, so this is printed
    end
    if merged > cl2 then
        print("Merged is a derivative of cl2") --it's that as well, so print
    end

    merged2 = cl1() + cl2  --create another derivative with the same parents
    merged2.val1 = 36  --we change one value

    if merged == merged2 then
        print("Merged2 is of the same type as merged") --they are the same type, note this only works when changing, when you add or remove values it is considered as a new class
    end

## Revised version example

Same as full.

## See also

Bartbes, creator and maintainer of SECS.

Category:

- Libraries