代码之家  ›  专栏  ›  技术社区  ›  David

RubyRake打印参数,但不喜欢它在methodCalll上的值

  •  0
  • David  · 技术社区  · 6 年前

    我有任务:

    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(名称:“team name”,子组织\u 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
    

    我做错什么了?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Neil Slater    6 年前

    您使用的语法就像插入字符串一样:

    #{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 .但是您应该尽早检查这个问题,如果是这样的话,那么任务就会失败,因为空的团队名称可能会在代码的其他地方引起问题。