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



我有任务:

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(名称: "团队名称", 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时,这是出乎意料的,因为它仍然认为上下文在方法调用内部,因此它无法完成外部块。

您应该使用:

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.但是,您确实应该更早地检查这一点,如果是这样,则任务失败,因为空的团队名称可能会在代码中的其他地方给您带来问题。

最新更新