在irb
中,regexp = /\A\d+->\d+\z/
将返回值打印为/\A\d+->\d+\z/
。我想在错误消息中为非匹配输入显示该字符串。
但是,调用regexp.to_s
或regexp.inspect
会产生略微不同的字符串。 regexp.to_string
不是一种方法。
irb
是否会调用方法来获取它显示的值,如果是,请使用哪种方法?
答案 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