Coffeescript скобки для вызова функции - PullRequest
2 голосов
/ 14 марта 2012

Coffeescript дает свободу устанавливать или опускать скобки для вызовов функций.Например,

alert 'Hi folks'
alert ('Hi folks')

равны.

Теперь мне интересно, вероятно, из-за недостаточного опыта работы с coffeescript, его синтаксиса и его стремления упростить задачу, если возможно добавить скобки дляутверждение вроде следующего. Я знаю, что они не нужны .

define (require) ->
   return 'goodbye'

Редактировать: Если я применю опцию для установки круглых скобок так же, как для оператора оповещения, то я бы предположил, что этот синтаксис не долженне имеет никакого значения к финалу JS.

define ((require) ->
   return 'goodbye'
)

Ответы [ 2 ]

3 голосов
/ 14 марта 2012
define (require) ->
   return 'goodbye'

будет эквивалентно коду JavaScript

define(function(require) { return 'goodbye' })

То есть вызов функции define с функцией в качестве первого (и единственного) аргумента.Вероятно, это не то, что вы ожидали от фрагмента, когда задавали свой вопрос.

Что-то, что я нашел очень полезным, когда я поиграл с CoffeeScript, это попробовать что-то в интерактивном диалоге «попробовать CoffeeScript» на сайт CoffeeScript .Это позволяет вам увидеть JavaScript, с которым скомпилирован данный фрагмент, и сразу увидеть, какой эффект, например, добавление скобок или изменение отступов, оказывает на полученный код JavaScript.Я определенно рекомендую сделать это.: -)

Изменить , чтобы отразить правку в вопросе:

Да, добавление скобок вокруг функции ((require) -> return 'goodbye') допустимо и не изменяетповедение.Однако обратите внимание, что "foo (bar)" и "foo(bar)" анализируются синтаксическим анализатором по-разному;в первом круглые скобки обозначают приоритет (приоритет, «обычные круглые скобки»), а во втором они являются круглыми скобками вызова функций.

«foo bar», «foo(bar)», «foo (bar)» allсделать то же самое, но тогда как "foo bar, baz" и "foo(bar, baz)" работают нормально, "foo (bar, baz)" является синтаксической ошибкой.

1 голос
/ 14 марта 2012

Да, вы можете заключить анонимную функцию в скобки.

Я запустил этот простой скрипт.

test.coffee

define = (func) -> func()

console.log define ((require) ->
   return 'goodbye'
)

выход:

goodbye
...