From 1b763a790e2afee60a073f255bf50b005f29f780 Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Mon, 15 Mar 2021 18:14:46 +0800 Subject: [PATCH] update doc --- docs/lib3x-hashmap.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/docs/lib3x-hashmap.md b/docs/lib3x-hashmap.md index f0e8add9..0ab36786 100644 --- a/docs/lib3x-hashmap.md +++ b/docs/lib3x-hashmap.md @@ -42,3 +42,28 @@ This function maps keys to values. You can use the following to process the retu echo(hashmap_keys(m3)); // a list contains "k2", "k2", "k3" echo(hashmap_values(m3)); // a list contains 20, 30, 40 echo(hashmap_entries(m3)); // a list contains ["k2", 20], ["k3", 30], ["k4", 40] + +Want to simulate class-based OO in OpenSCAD? Here's my experiment. + + use ; + use ; + + function methods(mths) = hashmap(mths); + function _(name, instance) = hashmap_get(instance, name); + + function clz_list(data) = function(name) _(name, + methods([ + ["get", function(i) data[i]], + ["append", function(n) clz_list(concat(data, [n]))] + ]) + ); + + lt1 = clz_list([10, 20]); + assert(lt1("get")(0) == 10); + assert(lt1("get")(1) == 20); + + lt2 = lt1("append")(30); + assert(lt2("get")(0) == 10); + assert(lt2("get")(1) == 20); + assert(lt2("get")(2) == 30); +