Чи є спосіб не повернути щось за допомогою CoffeeScript?


116

Схоже на те, що CoffeeScript автоматично повертає останній елемент в області застосування. Чи можу я уникнути цієї функції?


Чому б ви хотіли? Ви не можете просто відкинути повернене значення, коли вам подобається?
Кріс,

11
@Chris: Коли немає значення, що повертається, текти, що трапляється, є результатом останнього твердження, не є хорошою ідеєю.

11
@Chris це може мати наслідки для продуктивності з розумінням / for / while циклів, оскільки coffeescript може збирати результат кожної ітерації в масив, якщо використовується зворотне значення циклу (або якщо це останнє вираження функції)
Арно Ле Блан

1
У мене просто було це питання з кондуктором. Я визначив функцію в останньому рядку конструктора. Тож це було повернуто замість мого "Класу-функції". Мені довелося це явно повернути. Просто кажу, що це може бути проблемою.
Маркус

Відповіді:


150

Вам потрібно явно нічого не повертати або залишати невиразним вираз у нижній частині функції:

fun = ->
    doSomething()
    return

Або:

fun = ->
    doSomething()
    undefined

Ось що рекомендує доктор під час використання розумінь:

Будьте уважні, що ви не випадково повертаєте результати розуміння в цих випадках, додаючи змістовне повернене значення - як справжнє - або нулеве, внизу функції .


Однак ви можете написати обгортку так:

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

(Зверніть увагу на оператора splat тут ( ...))

І використовуйте його так, визначаючи функції:

fun = voidFun ->
    doSomething()
    doSomethingElse()

Або так:

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

Дякую за цю інформативну відповідь. Мені теж цікаво про це, коли я зараз навчаюсь кофескрипту. Мені цікаво, чи можете ви пролити трохи світла на те, який найкращий вибір, або який найгірший вибір був би, якщо запобігти поверненню цінності? В Зокрема, мені сказали , що варіанти додати або return, undefinedабо nullдо кінця моєї функції. Однак додавання nullмені чомусь здається неправильним. Чи правильно я вважаю це найгіршим вибором з трьох?
stefmikhail

2
У javascript функція без оператора return (або порожній return return) повертається невизначеною, тому найкращим варіантом є або додати порожнє повернення, або залишити undfinedв кінці. Використання порожнього returnоператора, здається, виражає повернення нічого кращого, ніж залишити а undefinedв кінці функції, тому порожнє returnздається кращим варіантом.
Арно Ле Бланк

2
Замість fun(arguments...)цього було б краще подзвонити fun.apply(this, arguments).
Мігель Мадеро

4
Власне, "return" і "undefined" генерують різні JavaScript. Використовуючи "Спробувати Coffeescript" на coffeescript.org , можна побачити, що явно включаючи "return" в coffeescript видаляє повернення з JavaScript; тоді як при "невизначеному" функція javascript закінчується на "return void 0";
Даніель

1
Я думаю, що вам може знадобитися бути обережними з voidFun, тому що я підозрюю, що внутрішня функція все одно поверне все, що хоче, що, можливо, може призвести до погіршення продуктивності.
AturSams

10

Так, з returnостаннім рядком функції.

Наприклад,

answer = () ->
  42

extrovert = (question) -> 
  answer()

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

Якщо ви хочете подивитися, до чого складається кава, спробуйте http://bit.ly/1enKdRl . (Я використовував кофеескрипт-редукс для свого прикладу)


1
Я думаю, що це було оскаржено, тому що ця відповідь не додає жодної цінності, крім тієї, яка вже є у відповіді, що голосує в голові, що також може бути надано за 2 роки до цього!
кумархарш

5

Просто щось цікаве

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

Function.prototypeсама по собі функція, яка завжди нічого не повертає. Ви можете використовувати композицію, щоб передати ваше повернене значення в цей чорнобір, і складена функція ніколи нічого не поверне.



-1

Здається, функції в CoffeeScript завжди повинні щось повертати, навіть null. В C у вас є voidтип повернення. ->, порожня функція збирається в (function() {}), тому це єдина функція, яка нічого не повертає.


Це не правда. return;працює в C, JavaScript та CoffeeScript, щоб повернути недійсне значення.
yyny
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.