Vim documentation: vital/Data/Closure

main help file
vital/Data/Closure.txt        Provide Closure object.

Maintainer: thinca <thinca+vim@gmail.com>

==============================================================================
CONTENTS                                Vital.Data.Closure-contents

INTRODUCTION                    Vital.Data.Closure-introduction
INTERFACE                       Vital.Data.Closure-interface
  FUNCTIONS                       Vital.Data.Closure-functions
OBJECTS                         Vital.Data.Closure-objects
  Closure Object                  Vital.Data.Closure-Closure



==============================================================================
INTRODUCTION                            Vital.Data.Closure-introduction

Vital.Data.Closure provides Closure object.

        let C = vital#{plugin-name}#new().import('Data.Closure')



==============================================================================
TERM                                    Vital.Data.Closure-term

{callable}                              Vital.Data.Closure-term-callable
        A {callable} is one of the followings.
        - A Funcref
          - Vital.Data.Closure.from_funcref()
        - A string of function name which begins from "*"
          - Vital.Data.Closure.from_funcname()
        - An ex command string which begins from ":"
          - Vital.Data.Closure.from_command()
        - A List of ex command strings which begin from ":"
          - Vital.Data.Closure.from_command()
        - An operator string such as '+', '%', or '=~#'
          - Vital.Data.Closure.from_operator()
        - An expr string which begins from "="
          - Vital.Data.Closure.from_expr()
        - A Closure object(Vital.Data.Closure-Closure)
        - A List that is arguments of Vital.Data.Closure.build().

{arglist}                               Vital.Data.Closure-term-arglist
        This is a List for the arguments of the function.

{args}...                               Vital.Data.Closure-term-args
        This is variadic for the function.

{context}                               Vital.Data.Closure-term-context
        This is a Dictionary that is treated as self of {function}.

{binding}                               Vital.Data.Closure-term-binding
        {binding} is a Dictionary.  You can access to this Dictionary from
        {expr} or {command} as local variables.
        Note that the key for Funcref must start with a capital.

        When {binding} is a List of Dictionary, a new Dictionary will be
        created as new {binding}, and all dictionaries are extended to the new
        dictionary.

        If local variable is changed, {binding} will change similarly.  This
        feature is available in Vim 7.3.560 or later.



==============================================================================
INTERFACE                               Vital.Data.Closure-interface

------------------------------------------------------------------------------
FUNCTIONS                               Vital.Data.Closure-functions

                                        Vital.Data.Closure.build()
build({callable} [, {arglist}][, {context}])
        Builds a Closure object(Vital.Data.Closure-Closure) from {callable}.

        It is {arglist} when the second argument or subsequent ones is a list.
        It is {context} when the second argument or subsequent ones is a
        dictionary.
        See Vital.Data.Closure-Closure for detail of {arglist} and
        {context}.

call({callable}, {args}...)             Vital.Data.Closure.call()
        Shortcut version of Vital.Data.Closure.apply().
        {args}... is treated as {arglist}.

                                        Vital.Data.Closure.apply()
apply({callable} [, {arglist}][, {context}])
        Builds a Closure object by Vital.Data.Closure.build() and calls it.
        See Vital.Data.Closure.build() for detail of arguments.

                                        Vital.Data.Closure.from_funcref()
from_funcref({funcref} [, {arglist}][, {context}])
        Builds a Closure object from {funcref}.
        See Vital.Data.Closure-Closure for detail of {arglist} and
        {context}.

                                        Vital.Data.Closure.from_funcname()
from_funcname({funcname} [, {arglist}][, {context}])
        Builds a Closure object from {funcname}.
        There may be "*" prefix in {funcname}.
        {funcname} is a builtin function or global function.
        See Vital.Data.Closure-Closure for detail of {arglist} and
        {context}.

from_expr({expr} [, {binding}])         Vital.Data.Closure.from_expr()
        Builds a Closure object from {expr} string.
        There may be "=" prefix in {expr}.
        You can use a: as the arguments.
        See Vital.Data.Closure-term-binding about {binding}.

from_command({command} [, {binding}])   Vital.Data.Closure.from_command()
        Builds a Closure object from {command}.
        {command} is a String or a List of strings.
        You can use a: as the arguments.
        See Vital.Data.Closure-term-binding about {binding}.

from_operator({operator})               Vital.Data.Closure.from_operator()
        Builds a Closure object from {operator}.
        {operator} is an operator string such as '+', '%', or '=~#'

from_method({object}, {method})         Vital.Data.Closure.from_method()
        Builds a Closure object from {object}(Dictionary) and the name of
        {method}.

compose({callables})                    Vital.Data.Closure.compose()
        Builds a new composed Closure objects from {callables}.
        {callables} is a List of callable(Vital.Data.Closure-term-callable).

        For example, there are the functions named "F", "G", "H":

        compose(['*F', '*G', '*H']).call({args}) == F(G(H({args})))

        Other example:

        let sortuniq = C.compose(['*uniq', '*sort'])
        echo sortuniq.call([2, 4, 2, 1, 3, 4, 5, 1, 5, 3])
        " => [1, 2, 3, 4, 5]

is_closure({expr})                      Vital.Data.Closure.is_closure()
        Returns true when the {expr} is a Closure object.

is_callable({expr})                     Vital.Data.Closure.is_callable()
        Returns true when the {expr} is callable.
        See also Vital.Data.Closure-term-callable.

sweep_functions()                       Vital.Data.Closure.sweep_functions()
        Sweeps garbage functions.
        Vital.Data.Closure-Closure.to_function() with {limit} creates a
        function, but can not delete the function itself.
        As a result, the function remains as garbage.
        This function sweeps it.
        This is automatically called by Vital.Data.Closure.build().

is_binding_supported()          Vital.Data.Closure.is_binding_supported()
        Returns true when the {binding} feature supports local changing.
        See also Vital.Data.Closure-term-binding.



==============================================================================
OBJECTS                                 Vital.Data.Closure-objects

------------------------------------------------------------------------------
Closure Object                  Vital.Data.Closure-Closure

A Closure object has following members.

- function(Funcref)
- arglist(Vital.Data.Closure-term-arglist)
  - Part of head of arguments.
- context(Vital.Data.Closure-term-context)

Closure object can call the {function} with {arglist}, and with {context}.
Example:
        let closure = C.from_funcname('strftime', ['%Y%m%d'])
        echo closure.call(1412686257)

Closure.call({args}...)         Vital.Data.Closure-Closure.call()
        Shortcut version of Vital.Data.Closure-Closure.apply().
        {args}... is treated as {arglist}.

Closure.apply({arglist})        Vital.Data.Closure-Closure.apply()
        Calls this Closure object with {arglist}.

Closure.with_args({args}...)    Vital.Data.Closure-Closure.with_args()
        Shortcut version of Vital.Data.Closure-Closure.with_arglist().
        {args}... is treated as {arglist}.

Closure.with_arglist({arglist}) Vital.Data.Closure-Closure.with_arglist()
        Creates a new Closure object which has the {arglist}.
        {arglist} is appended to the existing arglist.

        let get_win_var = C.from_funcname('getwinvar')
        let get_current_win_var = get_win_var.with_arglist([0])
        let get_current_win_scope = get_current_win_var.with_arglist([''])
        echo get_current_win_scope.call() is getwinvar(0, '')

Closure.with_context({context}) Vital.Data.Closure-Closure.with_context()
        Creates a new Closure object which has the {context}.
        {context} is replaced by the argument.

Closure.compose({callable})     Vital.Data.Closure-Closure.compose()
        Same as `C.compose([{callable}, self])`.
        See also Vital.Data.Closure.compose().

Closure.to_function([{limit}])  Vital.Data.Closure-Closure.to_function()
        Defines a new function for this closure and return its Funcref.
        Note that the function remains after this closure was deleted.
        When the {limit} is supplied, the function will be marked as delete
        after the function is called {limit} times.
        See also Vital.Data.Closure.sweep_functions().

Closure.delete_function()       Vital.Data.Closure-Closure.delete_function()
        Deletes the function made by Vital.Data.Closure-Closure.to_function().



==============================================================================
vim:tw=78:fo=tcq2mM:ts=8:ft=help:norl

top - main help file - tag index