Is there any way to not return something using CoffeeScript?

前端 未结 5 1004
刺人心
刺人心 2020-11-27 13:03

It seems like CoffeeScript automatically returns the last item in a scope. Can I avoid this functionality?

相关标签:
5条回答
  • 2020-11-27 13:04

    You have to explicitly return nothing, or to leave an expression evaluating to undefined at the bottom of your function:

    fun = ->
        doSomething()
        return
    

    Or:

    fun = ->
        doSomething()
        undefined
    

    This is what the doc recommends, when using comprehensions:

    Be careful that you're not accidentally returning the results of the comprehension in these cases, by adding a meaningful return value — like true — or null, to the bottom of your function.


    You could, however, write a wrapper like this:

    voidFun = (fun) ->
        ->
            fun(arguments...)
            return
    

    (Notice the splat operator here (...))

    And use it like this when defining functions:

    fun = voidFun ->
        doSomething()
        doSomethingElse()
    

    Or like this:

    fun = voidFun(->
        doSomething()
        doSomethingElse()
    )
    
    0 讨论(0)
  • 2020-11-27 13:06

    Yes , with a return as the last line of a function.

    For example,

    answer = () ->
      42
    
    extrovert = (question) -> 
      answer()
    
    introvert = (question) ->
      x = answer()
      # contemplate about the answer x
      return 
    

    If you'd like to see what js the coffee compiles to, try http://bit.ly/1enKdRl. (I've used coffeescript redux for my example)

    0 讨论(0)
  • 2020-11-27 13:09

    It seems functions in CoffeeScript must always return something, even null. In C, you have void as a return type. ->, the empty function, compiles to (function() {}), so it's the only function that doesn't return anything.

    0 讨论(0)
  • 2020-11-27 13:12
    longRunningFunctionWithNullReturn = ->
      longRunningFunction()
      null
    
    0 讨论(0)
  • 2020-11-27 13:28

    Just something fun(ctional)

    suppressed = _.compose Function.prototype, -> 'do your stuff'
    

    Function.prototype itself is a function that always return nothing. You can use compose to pipe your return value into this blackhole and the composed function will never return anything.

    0 讨论(0)
提交回复
热议问题