【问题标题】:Ruby Syntax Error, unexpected tLABELRuby 语法错误,意外的 tLABEL
【发布时间】:2015-08-28 20:24:49
【问题描述】:

编辑:

我创建了a package,它现在根据 GNU 公共许可证在 GitHub 上发布。非常感谢大家在这个问题上的帮助!

使用这部分脚本:

line = { TransactionType: "Payment",
Account: #{xagate},
Destination: #{destinationAddress},
Amount: {
currency: "TST",
value: "#{destAmount}",
issuer: "rKYHqy2QWbf5WThp7vdJAxTR3WBHKDh9xv"
}

我收到此错误:

syntax error, unexpected tLABEL
Destination: #{destinationAddress},
            ^

是什么导致了这个语法错误?下面接受的答案解释了如何解决此错误。至于波纹 JSON,我发现波纹服务器软件的 err29 是缺少费用和序列字段的结果。如果你也遇到这个问题,这个帖子正在调查答案:https://forum.ripple.com/viewtopic.php?f=2&t=15599

【问题讨论】:

  • 我为您的问题提交了编辑。您添加的有关undefined [] 的其他详细信息应作为新问题提交。但是,我建议您先修复 this 一个,然后再处理另一个错误。
  • 几乎所有在ruby 中发布的语法错误问题都可以通过查看 StackOverflow 语法高亮器的语法着色来解决。在这种情况下,例如,在违规行中,#清晰地 突出显示为注释(浅灰色),而不是字符串文字(栗色)。可悲的是,SO 的语法荧光笔实际上非常愚蠢,但仍然足够聪明,可以捕捉到几乎所有发布在 SO 上的语法错误。这让我想知道:在发布 syntax 问题以查看 syntax 突出显示时,任何人都不会想到吗?
  • 请编辑掉所有与tLABEL问题无关的细节
  • 完成。再次感谢您的帮助!在学习 Ruby 的 24 小时内,我收到了一条错误消息,我预计脚本的其余部分可能会出现该错误消息。
  • 我创建了a package,它现在根据 GNU 公共许可证在 GitHub 上发布。非常感谢大家在这个问题上的帮助!

标签: ruby syntax syntax-error


【解决方案1】:

unexpected tLABEL,根据我的经验,表示表达式或块没有正确结束。 Ruby 将您的代码读取为

line = { TransactionType: "Payment",
  Account: Destination:  # STOPS HERE from error

line 是您正在制作的哈希值。哈希遵循以下格式:{ key => value }{ key: value }。看起来您正在遵循第二种格式。正如您在上面看到的,Ruby 将您的代码读取为 { key: {key: } },其中缺少第二个键的值。

在字符串之外,# 符号告诉 Ruby “从这里到行尾的所有内容都是注释。”您可以使用 StackOverflow 语法高亮标记轻松地将 Ruby cmets 标记为灰色。

但在字符串内部,# 用于字符串插值,这似乎是您想要实现的。字符串插值包括环绕文本的 引号,如下所示:"Hello, #{planet}",其中#{} 是放置变量的位置。

这是您编写代码的方式,使用字符串插值:

Account: "#{xagate}",
Destination: "#{destinationAddress}",

如果您稍后查看代码,您实际上是使用line[Amount][value](即"#{destAmount}")进行此操作

由于您的字符串 only 包含插入的对象,我建议改为以下内容。首先,您可以在对象上调用to_s,将其转换为字符串。如果对象是一个数组,则字符串将包含逗号和括号。其次,你可以简单地做Account: xagate。这要简单得多,因为您可以对照变量检查值,而不是检查包含变量的字符串。 (少一步处理!)

最后,正如您在聊天中提到的,您是 Ruby 新手。标准约定是所有以大写字母开头的对象(如Account)指代,大写的对象是常量。这不是您的错误的原因,尽管现在开始修复此问题是一种好习惯...以防止可能由此产生的问题。

【讨论】:

  • 这就是问题所在。知道为什么我会收到此错误吗? nxt.rb:14:in <main>': undefined method []' for nil:NilClass (NoMethodError) Account 必须大写才能使付款 JSON 起作用,ruby 会认为这是一个类变量吗?这是在第 14 行紧接在 secret_xagate=ripple["secret"]["xagate"] 之后发生的,那么使用 YAML/ripple.yml 配置文件是否存在问题?
  • 我回答了您在聊天中提出的最初问题。后续问题应作为新问题提交。
【解决方案2】:

改变

Account: #{xagate},
Destination: #{destinationAddress},

Account: "#{xagate}",
Destination: "#{destinationAddress}",

双引号将字符串括起来,其中可能包含应插入的表达式。这些表达式字符串中标有#{...}

【讨论】:

  • 解决了这个问题,但我在尝试运行脚本时收到了一个新错误:nxt.rb:14:in <main>': undefined method []' for nil:NilClass (NoMethodError)
  • @user2984057 正如我对您的问题的评论,新问题应在新问题/帖子中提交。
猜你喜欢
  • 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
相关资源
最近更新 更多