I put “Bob” is strictly my name in the message box and got false. But then i tried “Bob” is my name and ALSO got false! Is that a bug?? 🤭
Sent from my iPhone > On Sep 1, 2023, at 10:24, Mark Waddingham via use-livecode > <use-livecode@lists.runrev.com> wrote: > > On 2023-09-01 17:44, Paul Dupuis via use-livecode wrote: >> I may just be experiencing a brain fart, but I have read the release notes >> several times, and I don't understand the purpose of the new: >> is strictly a name >> operator? Can someone explain its purpose in really basic terms or examples? > > Its purposes is so that it is possible to tell when a value is a 'name' > rather than a 'string' when the distinction is important. The cases where > this is true are few and far between - indeed, the use-case it was added for > was so that the exact runtime type of constant values generated when parsing > script (e.g. from constant initializers) is preserved. > > There are two kinds of strings internally - strings and names. All names are > strings, but not all strings are names. > > The difference is that there is only ever one instance of a name with a given > string in memory - e.g. if two variables hold a name whose string is "foo", > then they will hold the same pointer. > > As to what names are - they are an optimization for cases where the engine > will often do comparisons between them. > > Names are implemented in a global hash table in such a way that caseless and > case-sensitive comparisons are constant time (when both values being compared > are names). > > The keys of an array are names - which means the engine never has to compare > the actual characters of a key in an array as it does a lookup. > > Literals in scripts are stored as names - so if you have 100 instances of the > string constant "foobar" throughout all your scripts as literals - there will > only actually be one instance of "foobar" > > Similarly, internally, object names, handler names and variable names are all > stored as, well, names (again - because they are commonly compared against > each other). > > Some examples of where you can observe a name are: > > put "foo" is strictly a name => true > > put ("foo" & empty) is strictly a name => false > > repeat for each key tFoo in { "foo": true } > put tFoo is a strictly a name => true > end repeat > > There might be a few other places where you could see a name rather than a > string, but as mentioned above - its unlikely that 99.9% of people would ever > need to worry about it :) > > Warmest Regards, > > Mark. > > -- > Mark Waddingham ~ m...@livecode.com ~ http://www.livecode.com/ > LiveCode: Build Amazing Things > > _______________________________________________ > use-livecode mailing list > use-livecode@lists.runrev.com > Please visit this url to subscribe, unsubscribe and manage your subscription > preferences: > http://lists.runrev.com/mailman/listinfo/use-livecode _______________________________________________ use-livecode mailing list use-livecode@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-livecode