web-dev-qa-db-ja.com

CoffeeScriptを使用して何かを返さない方法はありますか?

CoffeeScriptはスコープ内の最後のアイテムを自動的に返すようです。この機能を回避できますか?

115
Shamoon

明示的に何も返さないか、関数の下部で未評価に評価される式を残す必要があります。

fun = ->
    doSomething()
    return

または:

fun = ->
    doSomething()
    undefined

これは、内包表記を使用するときにドキュメントが推奨するものです。

これらの場合、意味のある戻り値を追加することにより、理解の結果を誤って返さないように注意してください— true —またはnull、関数の一番下に


ただし、次のようなラッパーを作成できます。

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

splat operator here(...))

そして、関数を定義するときに次のように使用します。

fun = voidFun ->
    doSomething()
    doSomethingElse()

またはこのように:

fun = voidFun(->
    doSomething()
    doSomethingElse()
)
148
Arnaud Le Blanc

はい、関数の最終行としてreturnを使用します。

例えば、

answer = () ->
  42

extrovert = (question) -> 
  answer()

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

コーヒーがどのjsにコンパイルされるかを確認するには、 http://bit.ly/1enKdRl を試してください。 (私の例ではcoffeescript reduxを使用しました)

10
gprasant

ただ何か楽しい(ctional)

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

Function.prototype自体は、常に何も返さない関数です。 composeを使用して戻り値をこのブラックホールにパイプすると、composed関数は何も返しません。

5
ming_codes
longRunningFunctionWithNullReturn = ->
  longRunningFunction()
  null
1
yfeldblum

CoffeeScriptの関数は、nullであっても常に何かを返さなければならないようです。 Cでは、戻り型としてvoidがあります。 ->(空の関数)は(function() {})にコンパイルされるため、何も返さない唯一の関数です。

0
L01man