2014-08-29 99 views
19

我想写这个如何逃避格式字符串花括号拉斯特

write!(f, "{ hash:{}, subject: {} }", self.hash, self.subject) 

但由于大括号具有特殊含义的格式很显然,我不能把外部大括号一样,没有逃跑。所以我试图逃避他们。

write!(f, "\{ hash:{}, subject: {} \}", self.hash, self.subject) 

Rust并不喜欢那样。然后我读到:

字符字符{,}或#可能包含在字符串中,前面加上\字符。由于\已经是Rust字符串中的转义字符,因此使用此转义符的字符串文字看起来像“\ {”。

所以,我想

write!(f, "\\{ hash:{}, subject: {} \\}", self.hash, self.subject) 

但是,这也不能正常工作。 :-(

+1

你是什么意思'不工作'?它是运行时错误(即您不期望的输出)还是编译时错误? – huon 2014-08-29 14:04:40

+0

这是编译时错误。但是,这是通过nos解决的。 – Christoph 2014-08-29 14:20:58

+0

哦,将来请包含编译器输出,最好是版本。这对于Rust来说尤其重要,因为编译器可以发生巨大的变化;在这里就是这种情况,主人(我猜是你正在阅读的文档)上的行为不同于0.11。 – huon 2014-08-29 23:55:52

回答

30

你可能会读一些过时的文档(如生锈0.9)

current way格式化字符串作为防锈0.11是逃避{和}与其他{}或

write!(f, "{{ hash:{}, subject: {} }}", self.hash, self.subject) 

的文字字符{和}可由 用相同的字符之前它们包含在一个字符串。例如,。

{字符 与{{和}字符逃脱}逃脱} 10
+0

谢谢。我真的很喜欢在文档中查找东西;-) – Christoph 2014-08-29 14:19:43

+0

实际上另一种方式是:使用0.11并阅读主文档。 – huon 2014-08-29 23:57:30

+0

@Christoph文档URL应该是'.../0.11/...'而不是'.../master/...'。 (或考虑[升级到每晚](http://doc.rust-lang.org/guide.html#installing-rust)。) – huon 2014-08-29 23:59:53