Ruby rake 打印参数,但不喜欢它在 methodcallll 上的值

标签 ruby syntax-error task bundle rake

我有任务:

desc "Create a team"
task :create_dev_team, [:team_name] do |t, args|
  puts "Creating \"#{args.team_name}\" team under Sub Org ID: 1"
  ESP::Team.create(name: #{args.team_name}, sub_organization_id: 1)
end

创建团队的 ESP SDK 文档是:

team = ESP::Team.create(name: "团队名称", sub_organization_id: 6)

当我直接从 irb 调用该行时,它工作正常,

但是 当我打电话时:
rake create_dev_team[Team Name] --trace

我得到:
rake aborted!

SyntaxError: /Users/me/dev/my-repo/Rakefile:348: syntax error, unexpected keyword_end

我究竟做错了什么?

最佳答案

您正在使用语法,就好像您在插入一个字符串:

#{args.team_name}

但是如果不引用字符串 - 这里没有假定的字符串。这意味着 Ruby 会将其视为从 # 开始的注释。 .这反过来意味着没有关闭 )在代码中。当解析器找到 end ,这是出乎意料的,因为它仍然认为上下文在方法调用内部,所以它无法完成外部 block 。

您应该使用:
ESP::Team.create(name: args.team_name, sub_organization_id: 1)

或者:
ESP::Team.create(name: "#{args.team_name}", sub_organization_id: 1)

如果您的方法总是返回 String,则应该使用前者。 .在这里,args.team_name可以返回 nil .但是你真的应该更早地检查一下,如果是这样的话,任务就会失败,因为一个空的团队名称可能会导致你代码中的其他地方出现问题。

关于Ruby rake 打印参数,但不喜欢它在 methodcallll 上的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51089933/

相关文章:

ruby - 编程 Ruby 老虎机游戏

带大括号的 Javascript const 声明

visual-studio-2008 - 下载的geckofx-18.0-package上的语法错误,如何解决?

c# - 异步运行同步代码

ruby - Vagrant 显然没有正确合并 Vagrantfiles,Chef 配置丢失

ruby-on-rails - 为什么这种类似作用域的查询方式不能使用reject呢?

c - 错误 c2371 结构 <type> 重新定义

c# - 等待与 task.Result 相同的已完成任务?

c# - 在非异步方法中返回异步任务的正确方法

ruby - 当 bundler 包含来自源代码的 gem 时,如何使用 native 扩展测试 gem?