Ruby语法错误,意外的tLABEL

时间:2015-08-28 20:24:50

标签: ruby syntax syntax-error

编辑:

我创建了a package,现在在GNU公共许可证下在GitHub上发布。非常感谢你们对这个问题的帮助!

使用这部分脚本:

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

我收到此错误:

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

导致此语法错误的原因是什么?下面接受的答案解释了如何解决此错误。至于Ripple JSON,我发现波纹服务器软件的err29是由于缺少Fee和Sequence字段而导致的。如果您还遇到此问题,则会在此主题中调查答案:https://forum.ripple.com/viewtopic.php?f=2&t=15599

2 个答案:

答案 0 :(得分:8)

根据我的经验,

unexpected tLABEL表示表达式或块未正确结束。 Ruby正在以

的形式阅读您的代码
line = { TransactionType: "Payment",
  Account: Destination:  # STOPS HERE from error

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

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

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

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

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

如果您稍后在代码中查看,那么您实际上是使用line[Amount][value]"#{destAmount}"

执行此操作

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

最后,正如你在聊天中提到的,你是Ruby的新手。标准惯例是所有以大写字母开头的对象(如Account)引用,而大写字母中的对象是常量。这不是你的错误的原因,虽然现在开始修复它是一个好习惯...以防止可能源于此的问题。

答案 1 :(得分:4)

变化

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

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

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