Props
BeginPackage["Props`"];
MakeMutable::usage="Makes a Head mutable";MakeObject::usage="Makes a Head an Object";
SetProp::usage="SetProperty but works on anything";PropVal::usage="SetProperty but works on anything";RemoveProp::usage="SetProperty but works on anything";PropList::usage="SetProperty but works on anything";
BeginPackage["`Package`"];
$PropertyStore::usage="";containsQ::usage="";set::usage="";get::usage="";keys::usage="";remove::usage="";list::usage="";
EndPackage[];
Begin["`Private`"];
⌈Basic Interface⌋
⌈Exposed⌋
$$hold~SetAttributes~HoldAllComplete
⌈SetProp⌋
⌈PropVal⌋
⌈PropList⌋
⌈RemoveProp⌋
⌈Operator Forms⌋
⌈Mutability⌋
⌈MakeMutable⌋
⌈MakeObject⌋
End[];
EndPackage[];
In[]:=
Language`SetMutationHandler[testObj,Print]
In[]:=
MakeObject[testObj[_Association?AssociationQ]]
In[]:=
obj=testObj@<||>
Out[]=
testObj
obj["Name"]="My object"
Out[]=
2