cont trad cap 27
This commit is contained in:
parent
d1d301dcf8
commit
f7cd817bff
1 changed files with 20 additions and 20 deletions
|
@ -456,59 +456,59 @@ Si no quieres llamar la función desde dentro de *lambda*, puedes refactorizar e
|
|||
let comidas_diarias = map(almuerzo_items, {index, item -> "Estoy tomando " . item . " para almorzar"})
|
||||
```
|
||||
|
||||
## Method Chaining
|
||||
## Encadenamiento de métodos
|
||||
|
||||
You can chain several Vimscript functions and lambda expressions sequentially with `->`. Keep in mind that `->` must be followed by a method name *without space.*
|
||||
Puedes encadenar varias funciones de Vimscript y expresiones *lambda* secuencialmente con `->`. Ten en mente que `->` debe ir seguido por un nombre de método *sin espacios en blanco*.
|
||||
|
||||
```
|
||||
Source->Method1()->Method2()->...->MethodN()
|
||||
Source->Metodo1()->Metodo2()->...->MetodoN()
|
||||
```
|
||||
|
||||
To convert a float to a number using method chaining:
|
||||
Para convertir un número flotante en número utilizando el método de encadenado, podemos hacer:
|
||||
|
||||
```
|
||||
echo 3.14->float2nr()
|
||||
" devuelve 3
|
||||
```
|
||||
|
||||
Let's do a more complicated example. Suppose that you need to capitalize the first letter of each item on a list, then sort the list, then join the list to form a string.
|
||||
Veamos un ejemplo más complicado. Supongamos que necesitas convertir a mayúsculas la primera letra de cada elemento de una lista, y después ordenar la lista y después unir la lista para formar una cadena.
|
||||
|
||||
```
|
||||
function! Capitalizer(word)
|
||||
return substitute(a:word, "\^\.", "\\u&", "g")
|
||||
function! Mayuscula(palabra)
|
||||
return substitute(a:palabra, "\^\.", "\\u&", "g")
|
||||
endfunction
|
||||
|
||||
function! CapitalizeList(word_list)
|
||||
return map(a:word_list, {index, word -> Capitalizer(word)})
|
||||
function! ListaMayuscula(lista_palabra)
|
||||
return map(a:lista_palabra, {index, palabra -> Mayuscula(palabra)})
|
||||
endfunction
|
||||
|
||||
let dinner_items = ["bruschetta", "antipasto", "calzone"]
|
||||
let cena_items = ["bruschetta", "antipasto", "calzone"]
|
||||
|
||||
echo dinner_items->CapitalizeList()->sort()->join(", ")
|
||||
echo cena_items->ListaMayuscula()->sort()->join(", ")
|
||||
" devuelve "Antipasto, Bruschetta, Calzone"
|
||||
```
|
||||
|
||||
With method chaining, the sequence is more easily read and understood. I can just glance at `dinner_items->CapitalizeList()->sort()->join(", ")` and know exactly what is going on.
|
||||
Con el método de encadenado, la secuencia es más sencilla de leer y entender. Me basta con echar un vistazo a `cena_items->ListaMayuscula()->sort()->join(", ")` y saber exactamente qué va a suceder.
|
||||
|
||||
## Closure
|
||||
## Cierre
|
||||
|
||||
When you define a variable inside a function, that variable exists within that function boundaries. This is called a lexical scope.
|
||||
Cuando defines una variable dentro de una función, esa variable exsite dentro de los límites de esa función. A esto se le llama alcance léxico (lexical scope).
|
||||
|
||||
```
|
||||
function! Lunch()
|
||||
let appetizer = "shrimp"
|
||||
function! Almuerzo()
|
||||
let appetizer = "camarón"
|
||||
|
||||
function! SecondLunch()
|
||||
function! SegundoAlmuerzo()
|
||||
return appetizer
|
||||
endfunction
|
||||
|
||||
return funcref("SecondLunch")
|
||||
return funcref("SegundoAlmuerzo")
|
||||
endfunction
|
||||
```
|
||||
|
||||
`appetizer` is defined inside the `Lunch` function, which returns `SecondLunch` funcref. Notice that `SecondLunch` uses the `appetizer`, but in Vimscript, it doesn't have access to that variable. If you try to run `echo Lunch()()`, Vim will throw an undefined variable error.
|
||||
`appetizer` está definido dentro de la función `Almuerzo`, que devuelve la *funcref* `SegundoAlmuerzo`. Ten en cuenta que `SegundoAlmuerzo` utiliza `appetizer`, pero en Vimscript, esta no tiene acceso a esa variable. Si intentas ejecutar `echo Lunch()()`, Vim mostrará un error de variable no definida.
|
||||
|
||||
To fix this issue, use the `closure` keyword. Let's refactor:
|
||||
Para solucionar este problema, utiliza la palabra clave `closure`. Volvamos a escribir el código:
|
||||
|
||||
```
|
||||
function! Lunch()
|
||||
|
|
Loading…
Reference in a new issue