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.data
Ruby等效.
编辑:
此外,在CoffeeScript中or=
并||=
编译成相同的JS.
归档时间: |
|
查看次数: |
9479 次 |
最近记录: |