CoffeeScript
2023-03-13
28
嵌入 JavaScript
问题
你想在CoffeeScript中嵌入找到的或预先编写的JavaScript代码。
解决方案
把JavaScript包装到撇号中:`function greet(name) {
return "Hello "+name;
}`# Back to CoffeeScript
greet "Coffee"
# => "Hello Coffee"
讨论
这是在CoffeeScript代码中集成少量JavaScript
2023-03-13
27
修饰模式
问题
你有一组数据,需要在多个过程、可能变换的方式下处理。
解决方案
使用修饰模式来构造如何更改应用。miniMarkdown = (line) ->if match = line.match /^(#+)\s*(.*)$/headerLevel = match[1].lengthheaderText = match[2]"<h#{headerLevel}>#{headerText}</h#{headerLevel}>"elseif line.l
2023-03-13
31
解释器模式
问题
其他人需要以控制方式运行你的一部分代码。相对地,你选择的语言不能以一种简洁的方式表达问题域。
解决方案
使用解释器模式来创建一个你翻译为特定代码的领域特异性语言(domain-specific language)。
我们来做个假设,例如用户希望在你的应用程序中执行数学运算。你可以让他们正向运行代码来演算指令(eval)但这会让他们运行任意代码。相反,你可以提供一个小型的“堆栈计算器(stack calculator)”语言,用来做单独分析,以便只运行数学运算,同时报告更有用的错误信息。c
2023-03-13
31
MongoDB
问题
你需要与一个MongoDB数据库连接的接口。
解决方案
对于 Node.js
安装如果你的计算机中还没有MongoDB ,需要安装。安装本地 MongoDB 模块。保存记录mongo = require 'mongodb'server = new mongo.Server "127.0.0.1", 27017, {}client = new mongo.Db 'test', server, {w:1}# save() updates
2023-03-13
29
由数组创建一个对象词典
问题
你有一组对象,例如:cats = [{name: "Bubbles"age: 1},{name: "Sparkle"favoriteFood: "tuna"}
]
但是你想让它像词典一样,可以通过关键字访问它,就像使用cats["Bubbles"]。
解决方案
你需要将你的数组转换为一个对象。通过这样使用reduce:# key = The key by which to index the di
2023-03-13
27
类似 Python 的 zip 函数
问题
你想把多个数组连在一起,生成一个数组的数组。换句话说,你需要实现与Python中的zip函数类似的功能。Python的zip函数返回的是元组的数组,其中每个元组中包含着作为参数的数组中的第i个元素。
解决方案
使用下面的CoffeeScript代码:# Usage: zip(arr1, arr2, arr3, ...)
zip = () ->lengthArray = (arr.length for arr in arguments)length = Ma
2023-03-13
49
单件模式
问题
许多时候你想要一个,并且只要一个类的实例。比如,你可能需要一个创建服务器资源的类,并且你想要保证使用一个对象就可以控制这些资源。但是使用时要小心,因为单件模式可以很容易被滥用来模拟不必要的全局变量。
解决方案
公有类只包含获得一个实例的方法。实例被保存在该公共对象的闭包中,并且总是有返回值。
这很奏效因为CoffeeScript允许你在一个类的声明中定义可执行的状态。但是,因为大多数CoffeeScript编译成一个IIFE包,如果这个方式适合你,你就不需要在类的声明中放置私有的类。之后的
2023-03-13
27
类变量和实例变量
问题
你想创建类变量和实例变量(属性)。
解决方案
类变量class Zoo@MAX_ANIMALS: 50MAX_ZOOKEEPERS: 3helpfulInfo: =>"Zoos may contain a maximum of #{@constructor.MAX_ANIMALS} animals and #{@MAX_ZOOKEEPERS} zoo keepers."Zoo.MAX_ANIMALS
# => 50Zoo.MAX_ZOOKEEPERS