ดูเหมือนว่า CoffeeScript จะส่งคืนรายการสุดท้ายในขอบเขตโดยอัตโนมัติ ฉันสามารถหลีกเลี่ยงฟังก์ชันนี้ได้หรือไม่?
ดูเหมือนว่า CoffeeScript จะส่งคืนรายการสุดท้ายในขอบเขตโดยอัตโนมัติ ฉันสามารถหลีกเลี่ยงฟังก์ชันนี้ได้หรือไม่?
คำตอบ:
คุณต้องไม่ส่งคืนสิ่งใดอย่างชัดเจนหรือปล่อยให้นิพจน์ประเมินเป็นไม่ได้กำหนดไว้ที่ด้านล่างของฟังก์ชันของคุณ:
fun = ->
doSomething()
return
หรือ:
fun = ->
doSomething()
undefined
นี่คือสิ่งที่เอกสารแนะนำเมื่อใช้ความเข้าใจ:
ระวังว่าคุณไม่ได้ตั้งใจที่จะกลับผลของการเข้าใจในกรณีเหล่านี้โดยการเพิ่มค่าตอบแทนที่มีความหมายเหมือน - ความจริง - หรือโมฆะไปด้านล่างของฟังก์ชั่นของคุณ
อย่างไรก็ตามคุณสามารถเขียนกระดาษห่อหุ้มได้ดังนี้:
voidFun = (fun) ->
->
fun(arguments...)
return
(สังเกตตัวดำเนินการ Splatที่นี่ ( ...
))
และใช้ในลักษณะนี้เมื่อกำหนดฟังก์ชัน:
fun = voidFun ->
doSomething()
doSomethingElse()
หรือเช่นนี้:
fun = voidFun(->
doSomething()
doSomethingElse()
)
return
, undefined
หรือnull
ที่ส่วนท้ายของฟังก์ชั่นของฉัน อย่างไรก็ตามการเพิ่มnull
ดูเหมือนจะผิดสำหรับฉันด้วยเหตุผลบางประการ ฉันคิดถูกไหมที่คิดว่ามันเป็นตัวเลือกที่แย่ที่สุดในสามตัวนี้
undfined
ตอนท้าย การใช้return
คำสั่งว่างเปล่าดูเหมือนจะไม่ส่งผลอะไรที่ดีไปกว่าการปล่อยให้undefined
ส่วนท้ายของฟังก์ชันดังนั้นช่องว่างreturn
จึงเป็นตัวเลือกที่ดีกว่า
fun(arguments...)
fun.apply(this, arguments)
ใช่โดยมีreturn
เป็นบรรทัดสุดท้ายของฟังก์ชัน
ตัวอย่างเช่น,
answer = () ->
42
extrovert = (question) ->
answer()
introvert = (question) ->
x = answer()
# contemplate about the answer x
return
หากคุณต้องการที่จะเห็นสิ่ง js compiles กาแฟลองhttp://bit.ly/1enKdRl (ฉันใช้ Coffeescript redux สำหรับตัวอย่างของฉัน)
เพียงแค่บางสิ่งบางอย่างที่สนุก (เฉพาะทาง)
suppressed = _.compose Function.prototype, -> 'do your stuff'
Function.prototype
ตัวมันเองเป็นฟังก์ชันที่ไม่คืนค่าใด ๆ เสมอ คุณสามารถใช้การเขียนเพื่อกำหนดค่าที่ส่งคืนของคุณลงในแบล็คโฮลนี้และฟังก์ชันที่ประกอบด้วยจะไม่ส่งกลับอะไรเลย
longRunningFunctionWithNullReturn = ->
longRunningFunction()
null
ดูเหมือนว่าฟังก์ชันใน CoffeeScript จะต้องส่งคืนบางอย่างnull
เสมอ ใน C คุณมีvoid
เป็นประเภทผลตอบแทน
->
ฟังก์ชันว่างคอมไพล์(function() {})
ดังนั้นจึงเป็นฟังก์ชันเดียวที่ไม่ส่งคืนอะไรเลย
return;
ทำงานใน C, JavaScript และ CoffeeScript เพื่อส่งคืนค่าโมฆะ