Hi, ----- On 22 May, 2018, at 09:04, Ryan Schmidt [email protected] wrote:
>> The cleanest way of defining a global const variable that I’ve come across is >> with trace, tying the variable to a write command with an explicit error >> message. >> >> But the Tcl wiki page that I linked to previously notes that "command names >> are >> the natural choice for constants: >> • they live in a separate namespace to variables; >> • they are rarely redefined, and few commands do so; >> • global commands are available everywhere without importing; >> • they offer the possibility of byte-code optimization, i.e. inlining >> (no idea >> if this is or could be done).” > > Yes, I know that variables can be made read-only through a trace. MacPorts > base > has a feature built around traces called option_proc. So my question is why it > wasn't done that way. > > Clemens, do you remember? Simple, declaring a variable gives you the option of changing it. Making it a proc doesn't. It's about runtime vs. compile time failure if you're trying to do something unsupported. IMHO, using a proc for read-only variables is much cleaner than using a write trace, which feels like a hack to me. Why would you need it to be a variable? Could you not just call the proc instead? -- Clemens Lang
