ดูเหมือนว่า 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 เพื่อส่งคืนค่าโมฆะ