我主要是一名Rails开发人员,因此在为我公司的Hubot实例编写一个小脚本时,我希望实现以下目标:

robot.brain.data.contacts ||= {}

或者,只在这个新哈希不存在的情况下创建它.我的 idea 是,我希望通过脚本动态添加联系人数组,这样我就不必修改Hubot的源代码,而且我显然不想覆盖添加到其中的任何联系人.

问题:有没有像Rails | |=这样的快速小构造,我可以在Coffeescript中使用它来实现上述目标?

干杯

推荐答案

您可以使用?=进行条件赋值:

speed ?= 75

?是CoffeeScript中的"存在运算符",因此它将测试存在性(而不是真实性):

if (typeof speed === "undefined" || speed === null) speed = 75;

不过,在您的情况下,结果JS有点不同,因为您测试的是一个对象属性,而不仅仅是一个变量,所以robot.brain.data.contacts ?= {}结果如下:

var _base, _ref;
if ((_ref = (_base = robot.brain.data).contacts) != null) {
  _ref;
} else {
  _base.contacts = {};
};

更多信息:http://jashkenas.github.com/coffee-script/

Ruby-on-rails相关问答推荐

使用Hotwire/Turbo的Rails在链接悬停时获取请求

安装特定版本的Ruby时出现问题(OpenSSL问题)

在Rails中,如何将帮助器方法添加到属性/列?

复制我的活动时,活动描述没有复制过来

显示每个 rspec 示例的运行时

PostgreSQL 无间隙序列

rails select标签,预先 Select 了多个值

理解 Gemfile.lock:删除 Gemfile.lock 然后再次运行 bundle install 可以吗?

fields_for 表单构建器对象为零

禁用 RVM 或使用没有 RVM 安装的 Ruby?

从 before_action 中排除控制器

如何将字符串转换为类方法?

如何获取包含表的列名的数组

为什么 respond_with 被从 rails 4.2 移除到它自己的 gem 中?

按周/月/等和 ActiveRecord 分组?

控制器 helper_method

Test::Unit Rails - 如何断言一个数字大于另一个?

Sidekiq Rails 4.2 使用 Active Job 还是 Worker?有什么不同

使用设计创建一个用户显示页面

Rails:您已经激活了 rake 10.3.1,但您的 Gemfile 需要 rake 10.2.2 (Gem::LoadError)