【发布时间】:2016-04-15 09:55:18
【问题描述】:
在 Ruby 中,我需要让用户编辑一段文本。必须使用\n、\t 等格式序列在一行中编辑文本,而不是制表符和回车。我将阅读此文本(使用Readline,带有自动完成功能),解释它,检查并可能让用户再次更正它。
我可以使用String#dump 来获取格式字符转义的文本(例如,用于自动完成或提供它以进行更正)。但是当用户使用\n、\t 等(也许还有 \somethingInUnicode)提供他的输入时,我如何“取消转储”它——让 Ruby 解释它能够使用@987654327 生成的所有 eascapes @方法?
有没有 Ruby 方法可以做到这一点?如果不是,我必须亲自tr 和gsub 或使用eval(糟糕!)...
【问题讨论】:
-
我认为
dump根本不是一个好方法。例如,如果我输入“I ❤ Ruby\n”,我不会在处理后看到“I \u{2764} Ruby\n”。我会定义允许的序列并手动来回转换它们。甚至我每天使用的报价也会被dump破坏:自己尝试"“Quote”".dump。 -
我可以使用转储或检查,但“定义允许的序列并手动来回转换”是没有问题的。正如您在我的问题末尾看到的那样,“手册”是我绝对想要避免的。顺便说一句,对于我的用例 \u{2764} 并不是一件坏事!
-
“对于我的用例
\u{2764}不是坏事”或者?您正在创建另一个应用程序,让我疯狂地回到 1995 年?我正在洗手。 -
我需要针对特定情况的特定解决方案。你不需要了解我的动机,也没有理由提出来。如果您不知道解决方案,请忘记它,让我们免于恶毒的 cmets - 我也很擅长。
-
我想知道
String#dump是否是一个单射函数。如果是,那么 Ruby 缺少String#undump。如果你使用eval,别忘了配置$SAFE。