IRB是否会调用特定方法来生成检验输出?

时间:2014-06-06 13:55:07

标签: ruby irb

irb中,regexp = /\A\d+->\d+\z/将返回值打印为/\A\d+->\d+\z/。我想在错误消息中为非匹配输入显示该字符串。

但是,调用regexp.to_sregexp.inspect会产生略微不同的字符串。 regexp.to_string不是一种方法。

irb是否会调用方法来获取它显示的值,如果是,请使用哪种方法?

2 个答案:

答案 0 :(得分:3)

inspect看起来因为转义字符而产生不同的输出。实际上这是IRB用于输出的方法,这很容易证明:

regexp.instance_eval { undef :inspect }
regexp
# => (Object doesn't support #inspect)

答案 1 :(得分:2)

regexp.inspect是你想要使用的。 IRB转义反斜杠,但如果你实际输出了字符串(例如使用puts),那些额外的反斜杠就不会出现:

>> regexp = /\A\d+->\d+\z/
/\A\d+->\d+\z/
>> regexp.inspect
"/\\A\\d+->\\d+\\z/"
>> puts _
/\A\d+->\d+\z/
nil