2016-03-20 1:43 GMT+09:00 thinca <[email protected]>:
> 2016-03-17 18:45 GMT+09:00 Bram Moolenaar <[email protected]>:
>>
>> Lilydjwg wrote:
>>
>>> On Wed, Mar 16, 2016 at 03:43:06PM +0100, Bram Moolenaar wrote:
>>> >
>>> > Kent Sibilev wrote:
>>> >
>>> > > On Tuesday, March 15, 2016 at 2:33:55 PM UTC-4, Bram Moolenaar wrote:
>>> > > > Patch 7.4.1577
>>> > > > Problem: Cannot pass "dict.Myfunc" around as a partial.
>>> > > > Solution: Create a partial when expected.
>>> > > > Files: src/eval.c, src/testdir/test_partial.vim
>>> > > >
>>> > >
>>> > > This change doesn't allow functions like this:
>>> > >
>>> > > function! s:cache_clear(...) dict
>>> > >
>>> > > function! rails#cache_clear(...)
>>> > >
>>> > > to be defined at the same time. Any particular reason for this, cause
>>> > > this change breaks vim-rails plugin.
>>> >
>>> > The patch should not change anything about what functions you can
>>> > define.
>>> >
>>> > What is the error? Can you make a small example that fails?
>>>
>>> I get these:
>>>
>>> 处理 function <SNR>30_import[11]..<SNR>30__import[20]..<SNR>30__build_module
>>> 时发生错误:
>>> 第 14 行:
>>> E924: can't have both a "self" dict and a partial: <SNR>30_load
>>> Mark: Invalid value type for g:mwPalettes[maximum]
>>>
>>> At least two plugins are broken.
>>>
>>> One of them is the mark.vim plugin, which does this:
>>>
>>> elseif type(g:mwPalettes[g:mwDefaultHighlightingPalette]) ==
>>> type(function('tr'))
>>>
>>> The left side evaluates to a function ref. The result is 10, not 2.
>>>
>>> The other is from an old version of neocomplete,
>>> autoload/vital/_b6a796b.vim. You can view it here:
>>> https://github.com/lilydjwg/dotvim/blob/master/autoload/vital/_b6a796b.vim#L144
>>>
>>> There are a lot of similar error messages from neocomplete too (both the
>>> version I'm using and the latest version on GitHub).
>>
>> Please try the latest patch, hopefully this is fixed now.
>
> This is not fixed in Vim 7.4.1603.
>
> I think funcref and partial are same thing in Vim script, so
> type({partial}) should return 2.
>
> diff --git a/src/eval.c b/src/eval.c
> index a2288f9..69969fe 100644
> --- a/src/eval.c
> +++ b/src/eval.c
> @@ -20398,6 +20398,7 @@ f_type(typval_T *argvars, typval_T *rettv)
> {
> case VAR_NUMBER: n = 0; break;
> case VAR_STRING: n = 1; break;
> + case VAR_PARTIAL:
> case VAR_FUNC: n = 2; break;
> case VAR_LIST: n = 3; break;
> case VAR_DICT: n = 4; break;
> @@ -20411,7 +20412,6 @@ f_type(typval_T *argvars, typval_T *rettv)
> break;
> case VAR_JOB: n = 8; break;
> case VAR_CHANNEL: n = 9; break;
> - case VAR_PARTIAL: n = 10; break;
> case VAR_UNKNOWN:
> EMSG2(_(e_intern2), "f_type(UNKNOWN)");
> n = -1;
>
>
> Or, a funcref in a dictionary must not be converted to a partial for
> compatibility.
I thought once again to this problem.
I often use the idiom as below:
let s:base = {}
function! s:base.method()
" ...
endfunction
let instance = copy(s:base)
function IsInstance(instance)
" Check the instance has a same method as the base
return s:base.method == a:instance.method
endfunction
This doesn't work when a method is converted to a partial automatically.
This patch(7.4.1577) breaks backward compatibility.
--
--
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/d/optout.