Nic*_*ius 45 ruby-on-rails coffeescript
我主要是一个Rails开发人员,所以在为我公司的Hubot实例添加一个小脚本时,我希望能够完成以下任务:
robot.brain.data.contacts ||= {}
Run Code Online (Sandbox Code Playgroud)
或者,如果它尚不存在,则仅生成此新哈希.想法是我希望通过脚本动态添加联系人数组,这样我就不必修改Hubot的源代码了,我显然不想覆盖我添加的任何联系人.
问题:是否有像Rails || =这样的快速小构造,我可以在Coffeescript中使用它来实现上述目标?
干杯.
cor*_*ard 63
您可以使用?=条件分配:
speed ?= 75
Run Code Online (Sandbox Code Playgroud)
这?是CoffeeScript中的"存在运算符",因此它将测试存在性(不是真实性):
if (typeof speed === "undefined" || speed === null) speed = 75;
Run Code Online (Sandbox Code Playgroud)
但是,在您的情况下,生成的JS有点不同,因为您正在测试对象属性,而不仅仅是变量,因此robot.brain.data.contacts ?= {}导致以下结果:
var _base, _ref;
if ((_ref = (_base = robot.brain.data).contacts) != null) {
_ref;
} else {
_base.contacts = {};
};
Run Code Online (Sandbox Code Playgroud)
更多信息:http://jashkenas.github.com/coffee-script/
San*_*dro 12
我个人使用or=而不是?=主要是因为||=当我在Ruby中使用它时,我称之为(或等于).
robot.brain.data.contacts or= {}
Run Code Online (Sandbox Code Playgroud)
不同的是or=短路的时候robot.brain.data.contacts是不是null,而?=做检查null,只设置robot.brain.data.contacts到{}如果不null.
正如另一篇文章中所提到的,这两种方法都没有检查是否存在robot,robot.brain或者robot.brain.dataRuby等效.
编辑:
此外,在CoffeeScript中or=并||=编译成相同的JS.
| 归档时间: |
|
| 查看次数: |
9479 次 |
| 最近记录: |