【问题标题】:Ruby - syntax error, unexpected tLABELRuby - 语法错误,意外的 tLABEL
【发布时间】:2016-03-23 19:59:24
【问题描述】:

我在下面的 Ruby 代码中收到 语法错误,意外 tLABEL。错误描述在“超时”之后指向“:”。

def self.run(*args, timeout: nil, environment: {})
  # ...
end

我对 Ruby 一无所知。我尝试了一些方法,例如用 '=' 替换 ':' 或将 nil 放入 {},但似乎没有任何效果。

我的 ruby​​ 版本是 2.1.5。

IUQ-mini:~ IUQ$ rbenv versions
system
* 2.1.5 (set by /Users/IUQ/.ruby-version)
2.1.7
2.2.3

具体代码可以在here at line #38找到。

关于 SO 的几个问题表明这可能是由于大括号放错了,但我没有看到错误 - 再次是我缺乏 Ruby 知识!

请帮助我了解此错误的原因以及如何解决此问题?

谢谢

【问题讨论】:

  • 以上代码在 Ruby 2.x 中有效。你确定你没有运行 Ruby 1.9?
  • @Stefan - 是的,它的 2.1.5。 rbenv 版本 返回 _* 2.1.5(由 /Users/me/.rbenv/versions/.ruby-version 设置)
  • 如何执行产生此错误的代码?
  • 我有一个 Java 程序,它通过 JRuby(版本 1.7.24)间接执行此代码。如您所见,它是 command_runner_ng gem 的一部分,它依赖于 run_loop gem。它们都是 calabash-ios 设置的一部分。
  • 似乎 JRuby 正在“1.9 模式”下运行您的代码,并且您的 Ruby 2.1.5 安装根本没有使用。也许熟悉 JRuby 和/或 calabash-ios(我不是)的人可以提供帮助。

标签: ruby calabash-ios


【解决方案1】:

这在 ruby​​ 1.9(如果实际上 JRuby 将您限制在 1.9)中不起作用,因为如果 splat 是第一个参数,则预计它后面会立即有一个哈希。

你可以这样做:

def self.run (environment = {}, timeout = nil, *args)
end

唯一的问题是,如果您想将内容传递为 args[],​​则必须显式传递一些内容(甚至是 nil)。

【讨论】:

  • FWIW,有办法说 JRuby 使用更新的 Ruby 规范,我想使用 1.9 以确保最稳定的环境。
  • 语法错误消失,但随后程序抛出异常 不支持的超时值“超时”。必须是数字。 Line #59
  • command_output = CommandRunner.run(['xcrun'] + args, timeout: timeout) - 这是调用者代码
  • 感谢@10dot。它消除了原始错误,但听起来像是拼凑而成,因为它被认为是由于 JRuby 而发生的。我会尝试弄清楚如何让 JRuby 使用更新的 Ruby。
【解决方案2】:

Calabash iOS 和 Android 需要 ruby​​ >= 2.0。

推荐使用最新发布的ruby版本。

目前不支持任何版本的 JRuby。

特拉维斯构建

如果您查看该构建的信息,您会发现它失败了,因为它在 ruby​​ 1.9.3 上运行。

我相信你已经安装了 ruby​​ 2.0。我不认为你在使用它。

$ rbenv versions
  system
  1.8.7-p375
  1.9.3-p484
  2.0.0-p481
  2.1.5
  2.2.2
  2.2.3
* 2.3.0 (set by /Users/moody/.rbenv/version)  <== Active ruby in this dir
  jruby-1.7.18

 $ rbenv version # Active ruby in this directory
 2.3.0

您从未提及您使用的是哪个版本的 run_loop。您应该更新到最新的稳定版本。

https://github.com/calabash/calabash-ios/wiki/Updating-your-run-loop-version

【讨论】:

  • https://travis-ci.org/calabash/run_loop/jobs/81955466。错误日志快照中的第 178 行。我的系统上安装了三个 Ruby 版本(2.1.5、2.1.7、2.2.3),它们都是 >2 并且 2.1.5 在 xamarin 的建议下处于活动状态。谢谢。
  • 在我的例子中,它返回 * 2.1.5(由 /Users/IUQ/.ruby-version 设置)。更新了问题以反映相同。而run_loop 版本是2.0.9。任何大于 1.5.0 的 run_loop 版本都会出现此错误。
  • 我认为问题在于 10dot 建议的 JRuby 接口。我们不会更新运行循环代码以支持 ruby​​ 1.9 语法。我对 JRuby 一无所知,但你可以通过 --2.0 作为选项吗? stackoverflow.com/questions/15281036/…
猜你喜欢
  • 2018-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-11
  • 1970-01-01
  • 1970-01-01
  • 2018-08-03
  • 1970-01-01
相关资源
最近更新 更多