【发布时间】:2015-05-20 19:46:54
【问题描述】:
我不确定我在 CoffeeScript 中尝试完成的工作是否有 JavaScript 术语,但这是用例:
我正在使用 CommonJS 加载 JS 模块,它们可能会加载对象、函数、任何东西。 例如,如果我加载了一个对象字面量,我可以访问它的属性in-line,链接在 require() 调用之后。
// car.js returns an object properties and methods
var make = require('car').make
这在 CoffeeScript 中也是可能的,因为他们引入了方法链:
make = require 'car'
.make
但是……
在 JS 中,如果 require()'d 文件返回一个函数,我可以直接调用它:
// drive.js
module.exports = function(distance, speed) {
return distance / speed;
}
// index.js
var hours = require('drive')(1200, 120); // 10
以下尝试会导致错误:
// drive.coffee
module.exports = (distance, speed) ->
distance / speed
// index.coffee
hours = require 'drive' 1200, 120 // error unexpected number
hours = require 'drive'
1200, 120 // error unexpected indentation
hours = require 'drive' (1200, 120) // error unexpected (
CoffeeScript 怎么做?
【问题讨论】:
-
你还是可以的
hours = require('drive')(1200, 120) -
说真的,coffeescript 的声明之一是提高了可读性。
require 'drive' 1200, 120比require('drive')(1200, 120)可读性如何? (事实并非如此,幸运的是它也是错误的。) -
首先,这部分是为了更好地理解 CS 语法的练习。其次,我确实相信
require 'drive' (1200, 120),例如,非常易读和直观 -
但是你为什么期望
f x (y)是f(x)(y)而不是f(x(y))?或者,如果 CoffeeScript 知道它正在使用字符串文字,您是否希望它表现得特别好? -
我没想到 - 这就是为什么我想知道这些动态回调是否有另一种形式的特殊语法,比如新的方法链接语法
标签: coffeescript method-chaining