On 25-Jun-2013 17:45 +0200, Ben Fritz wrote:
> On Monday, June 17, 2013 2:34:00 PM UTC-5, Bram Moolenaar wrote:
>>
>> I do not like the idea of accessing functions with arbitrary names.
>>
>> I would rather also disallow:
>>
>> let dict['/foo'] = function('tr')
>>
>> Would that break any plugin?
>>
>
> Hi, Bram! I saw in your recent todo.txt update that you still have a note
> about possibly removing this functionality.
>
> Consider the following use case based on a real need I had once:
>
> A communication protocol has 2-byte IDs for commands. Each command identified
> by this 2-byte ID has potentially different command lengths and meaning of
> the remaining bytes in the message.
>
> I want to parse a capture file containing a hex representation of this
> communication protocol. In real life, I would probably do this using Perl so
> others on my team can use it, but I *could* do it in Vim.
>
> So, I create a Dict in vim with key strings corresponding to the hex value of
> the command IDs, e.g. "12AE". I assign each key a function reference to be
> used to parse the rest of that particular message.
>
> Note that "12AE" is an invalid function name. But I want to be able to call a
> function corresponding to that name in a lookup table anyway.
>
> Now, "12AE" isn't too weird of a name. But the protocol could be based on
> ASCII characters instead of byte values. Perhaps commands look like /command
> and data looks like [data]. Perhaps I want to be able to look up "/command"
> in the lookup table.
>
> I think allowing arbitrary dict keys to point to function references is a
> very useful feature. And it isn't confusing if you remember that you're
> storing a function reference in a Dict, not naming a function with a weird
> name. I think we should definitely keep the ability to assign a function
> reference to an arbitrary dict key. Furthermore, using this syntax:
>
> function dict['/foo']()
> endfunction
>
> allows doing this in a way that will not pollute the function namespace with
> extra functions that never get called directly.
+1; Dictionaries use (arbitrary) strings as keys, and they can map to
Funcrefs. Clean and simple. Though I haven't made use of this shorthand
notation yet, it looks useful. (But I also agree that a "normal"
:function definition should still be bound to the existing rules.)
-- regards, ingo
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.