On Sun, Oct 20, 2024 at 11:43:15AM +0200, Joost Kremers wrote: > Hi list, > > A question that just came up: if I use `apply-partially` to create a > function that has a hash table as one of its fixed arguments, and then at > some later point add data to said hash table, it seems that this data is > visible to subsequent calls to the partially applied function: > > ``` > (let* ((s #s(hash-table test equal data ("MGrt" "Mouton De Gruyter" > "OTS" "Utrecht School of Linguistics UiL-OTS"))) > (fn (apply-partially #'parsebib--expand-strings s))) > (puthash "BW" "Oxford: Blackwell Publishers" s) > (funcall fn "BW")) > "Oxford: Blackwell Publishers" > ``` > > `parsebib--expand-strings` is a function that (among other things) does a > hash table look-up. The entry ("BW" "Oxford: Blackwell Publishers") is > added to the hash table after the function is created, but it can obviously > still be found by it. > > So my question: is this intended behaviour, something that I can rely on to > continue to work, or is this an artefact of the implementation that may > change at any time in the future? This is an interesting question: it comes down to what can be considered "immutable". I guess a hash table doesn't count (as wouldn't a buffer, possibly a list or any other object with a complex "inner life"). Cheers -- t