2011-09-12 31 views
112

CoffeeScript otomatik olarak son öğeyi bir kapsamda döndürüyor gibi görünüyor. Bu işlevselliği engelleyebilir miyim?CoffeeScript kullanarak bir şey döndürmemenin bir yolu var mı?

+0

Niçin isterdin? İstediğiniz zaman iade edilen değeri alamaz mısınız? – Chris

+10

@Chris: Anlamlı bir geri dönüş değeri olmadığında, son ifadenin sonucu ne olursa olsun sızmak iyi bir fikir değildir. – delnan

+10

@ Chris bu, anlama/geri/süre döngüleri ile performans etkilerine sahip olabilir, çünkü coffeescript, döngüde dönüş değeri kullanılırsa (veya bir işlevin son ifadesi ise) her yineleme sonucunu bir dizide toplayabilir. – arnaud576875

cevap

143
Açıkça hiçbir şey dönmek veya fonksiyonun altındaki tanımsız için değerlendiren bir ifade bırakmak zorunda

:

fun = -> 
    doSomething() 
    return 

Veya:

fun = -> 
    doSomething() 
    undefined 

Bu doküman önerir budur, ne zaman anlamaları kullanma:

Anlama sonuçlarını yanlışlıkla döndürmediğinizden emin olun. , anlamlı bir dönüş değeri ekleyerek bu gibi durumlarda, işlevinizin altına doğru - veya null, gibi.


Ancak, böyle bir sarmalayıcı yazabilirsiniz: fonksiyonlarını tanımlarken

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

(burada splat operator (...) dikkat edin) Ve bu gibi kullanmak:

fun = voidFun -> 
    doSomething() 
    doSomethingElse() 

Ya da böyle:

fun = voidFun(-> 
    doSomething() 
    doSomethingElse() 
) 
+0

Bu bilgilendirici cevap için teşekkür ederiz. Ben de şu an bunu merak ediyordum. En iyi seçimin ne olduğuna dair bir ışık tutabiliyorsanız ya da bir değerin geri dönüşünü engellerken en kötü seçeneğin ne olabileceğini merak ediyorum. Spesifik olarak, seçeneklerin işlevimin sonuna 'dönüş', 'undefined' veya 'null' ekleme seçenekleri olduğu söylendi. Ancak, 'null' eklemek bir sebepten dolayı yanlış görünüyor. Bu üçten en kötü seçim olduğunu varsaymak doğru mu? – stefmikhail

+2

javascript'de dönüş ifadesi olmayan bir işlev (veya boş bir iade ifadesi) tanımsız olarak geri döner, bu nedenle en iyi seçenek boş bir dönüş eklenmesi veya sonunda bir "undfined" bırakmasıdır. Boş bir 'dönüş 'ifadesi kullanmak * bir şey döndürmüyor * işlevinin sonunda bir' undefined 'bırakmadan daha iyi bir şey ifade ediyor gibi görünüyor, bu yüzden boş' dönüş 'daha iyi bir seçenek gibi görünüyor. – arnaud576875

+2

Eğlence (argümanlar ...) 'yerine, fun.apply (bu, argümanlar)' i çağırmak daha iyi olurdu. –

1
longRunningFunctionWithNullReturn = -> 
    longRunningFunction() 
    null 
0

O CoffeeScript işlevler bile her zaman null şey dönmelidir görünüyor. C'de, dönüş türü olarak void var. ->, boş işlev (function() {}) için derler, bu yüzden hiçbir şey döndürmeyen tek işlevdir.

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

Function.prototype

+0

Bu doğru değil. 'return;' boş bir değer döndürmek için C, JavaScript ve CoffeeScript'te çalışır. – YoYoYonnY

5

Hemen eğlenceli bir şeyler (ctional) kendisi hep bir şey dönmek bir işlevdir. Geri dönüş değerinizi bu kara deliğin içine pipetlemek için kompozisyonu kullanabilirsiniz ve oluşan işlev hiçbir zaman bir şey döndürmeyecektir.

10

Evet, bir işlevin son satırı olarak return ile. Kahve için derler js görmek isterseniz Örneğin

,

answer =() -> 
    42 

extrovert = (question) -> 
    answer() 

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

, http://bit.ly/1enKdRl deneyin. (Örneğim için coffeescript redux kullanmıştım)

+1

downvoter, yorum lütfen! – gprasant

+1

Düşündüm sanırım bu cevap, bu oylamadan 2 yıl önce verilecek olan en üstteki cevapta zaten var olandan başka bir değer eklemiyor! –

+1

Ancak örnek çok havalı. –

İlgili konular