Ruby 语法错误,意外的 tLABEL

Ruby Syntax Error, unexpected tLABEL

编辑:

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

使用这部分脚本:

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

我收到此错误:

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

是什么导致了这个语法错误?下面接受的答案解释了如何修复此错误。至于 Ripple JSON,我发现 rippled 服务器软件的 err29 是缺少 Fee 和 Sequence 字段的结果。如果您也遇到这个问题,答案正在这个线程中调查:https://forum.ripple.com/viewtopic.php?f=2&t=15599

改变

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

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

双引号括起可能包含应插入的表达式的字符串。这些表达式 inside 一个字符串被标记为 #{...}

unexpected tLABEL,以我的经验,意味着表达式或块没有正确结束。 Ruby 正在阅读您的代码

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

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

在字符串之外,# 符号告诉 Ruby "everything from here to end-of-line is a comment." 您可以使用 Whosebug 语法高亮器将 Ruby 注释标记为灰色轻松看到这一点。

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

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

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

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

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

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