Wygląda na to, że CoffeeScript automatycznie zwraca ostatnią pozycję w zakresie. Czy mogę uniknąć tej funkcji?
Wygląda na to, że CoffeeScript automatycznie zwraca ostatnią pozycję w zakresie. Czy mogę uniknąć tej funkcji?
Odpowiedzi:
Musisz jawnie nic nie zwracać lub pozostawić na dole funkcji wyrażenie oceniające jako niezdefiniowane:
fun = ->
doSomething()
return
Lub:
fun = ->
doSomething()
undefined
Oto, co zaleca dokument, gdy używasz wyrażeń:
Uważaj, aby przypadkowo nie zwrócić wyników interpretacji w takich przypadkach, dodając znaczącą wartość zwracaną - na przykład true - lub null na końcu funkcji .
Możesz jednak napisać opakowanie w ten sposób:
voidFun = (fun) ->
->
fun(arguments...)
return
(Zwróć uwagę na operator splat tutaj ( ...
))
I używaj tego w ten sposób podczas definiowania funkcji:
fun = voidFun ->
doSomething()
doSomethingElse()
Lub tak:
fun = voidFun(->
doSomething()
doSomethingElse()
)
return
, undefined
lub null
do końca mojej funkcji. Jednak dodawanie null
wydaje mi się z jakiegoś powodu niewłaściwe. Czy mam rację, zakładając, że jest to najgorszy wybór z całej trójki?
undfined
na końcu. return
Wydaje się, że użycie pustej instrukcji nie zwraca nic lepszego niż pozostawienie znaku undefined
na końcu funkcji, więc pusta return
wydaje się być lepszą opcją.
fun(arguments...)
lepiej zadzwonić fun.apply(this, arguments)
.
Tak, z a return
jako ostatnim wierszem funkcji.
Na przykład,
answer = () ->
42
extrovert = (question) ->
answer()
introvert = (question) ->
x = answer()
# contemplate about the answer x
return
Jeśli chcesz zobaczyć, do czego skompilowana jest kawa, wypróbuj http://bit.ly/1enKdRl . (W moim przykładzie użyłem reduxu coffeescript)
Po prostu coś fajnego (opcjonalne)
suppressed = _.compose Function.prototype, -> 'do your stuff'
Function.prototype
sama w sobie jest funkcją, która zawsze nic nie zwraca. Możesz użyć funkcji Compose, aby przesłać swoją zwracaną wartość do tej czarnej dziury, a skomponowana funkcja nigdy niczego nie zwróci.
Wygląda na to, że funkcje w CoffeeScript zawsze muszą coś zwracać, nawet null
. W C masz void
jako typ zwracany.
->
, pusta funkcja, kompiluje się do (function() {})
, więc jest to jedyna funkcja, która nic nie zwraca.
return;
działa w C, JavaScript i CoffeeScript, aby zwrócić wartość void.