Module lege.struct

Allows the creation of strict structs.

Strict structs defined by this module have strict field access (I.E. trying to get or set the value of a field that is undefined for a given struct type is an error).

Usage:

    local struct = require "lege.struct"
    
    -- Define a Point struct, to hold x and y coordinates
    local Point = struct 'Point' {
    x = 0,
    y = 0,
    }
    
    -- Create a Point
    local p = Point {
    x = 10,
    y = 20,
    }
    print(p) --> struct Point: 0xdeadbeaf
    assert(p.x == 10)
    assert(p.y == 20)
    -- Trying to access or modify an undefined field is an error
    -- print(p.z) --> Error: no field 'z' on struct Point
    
    -- When constructing a new struct, unspecified fields get their default
    values p = Point {x=1} assert(p.x == 1) assert(p.y == 0)
    
    -- Struct fields can be modified as you'd expect, but don't set them to nil!
    p.y = 42
    assert(p.y == 42)
    

Meta Methods

__tostring Convert a struct type to a human-readable string.

Functions

returns... ()
_struct_err_nf (self, key) Raises an error caused by access to an undefined struct field.
new_instance (instance) Create a new struct type.
struct_body (fields) Define a struct's body.
struct (string) Create a struct type.


Meta Methods

__tostring
Convert a struct type to a human-readable string. Currently we merely output the struct's name and address.

param:

  • self struct The struct to convert to a string

Functions

returns... ()

Returns:

    A function struct that Allows you to define structs
_struct_err_nf (self, key)
Raises an error caused by access to an undefined struct field.

Parameters:

  • self struct The struct instance
  • key string The key that was undefined

Raises:

An error indicating which field was undefined, and on which struct type
new_instance (instance)
Create a new struct type. This is used as a closure returned from struct_body, and creates a new instance of a struct. Any unset fields are set to their default value as defined by the struct type.

Parameters:

  • instance table Table to use as the struct instance, including any pre-initialized fields

Returns:

    table The passed instance, modified to be a struct of the correct type

Raises:

If instance contains undefined fields for the struct type
struct_body (fields)
Define a struct's body. A closure over a struct's name returned from struct which creates a new metatable for the struct type, and allows you to define what fields and default values the struct has.

Parameters:

  • fields table Fields and default values for the new struct type

Returns:

    A closure new_instance over the struct type's name and fields to create a new instance of the defined struct type
struct (string)
Create a struct type.

Parameters:

  • string name The struct's type name (used when converting to string)

Returns:

    A closure over name struct_body to allow you to specify the struct's fields and default values
generated by LDoc 1.5.0 Last updated 2024-06-16 21:08:39