为什么包括?对于 Ruby return 错误?
Why does include? for Ruby return false?
我有以下来自 byebug 会话的 Ruby 片段:
(byebug) target_name
"foo/"
(byebug) target_name.class
String
(byebug) target_name.include?('/')
false
(byebug) "foo/".include?('/')
true
为什么 include?
方法 return false
因为 /
是 foo/
的一部分?
Ruby版本:
ruby 2.6.1p33 (2019-01-30 revision 66950) [x86_64-linux]
可能 target_string
包含一些非 ascii 字符。
例如比较:
irb(main):019:0>> str = "foo/"
=> "foo/"
irb(main):020:0> str.ascii_only?
=> true
irb(main):021:0> str.include?("/")
=> true
和
irb(main):022:0> str = "foo\xe2\x88\x95"
=> "foo∕"
irb(main):023:0> str.ascii_only?
=> false
irb(main):024:0> str.include?("/")
=> false
在后一个示例中,字符串包含编码为 utf-8 字节的“正斜杠”U+2215
字符。
根据您的具体用例,您可以例如将字符串转换为 ascii 并盲目地用 /
.
替换任何未定义或无效的字符
str.encode("ascii", "utf-8", replace: "/")
查看 #encode
方法以获得更多选项。
我有以下来自 byebug 会话的 Ruby 片段:
(byebug) target_name
"foo/"
(byebug) target_name.class
String
(byebug) target_name.include?('/')
false
(byebug) "foo/".include?('/')
true
为什么 include?
方法 return false
因为 /
是 foo/
的一部分?
Ruby版本:
ruby 2.6.1p33 (2019-01-30 revision 66950) [x86_64-linux]
可能 target_string
包含一些非 ascii 字符。
例如比较:
irb(main):019:0>> str = "foo/"
=> "foo/"
irb(main):020:0> str.ascii_only?
=> true
irb(main):021:0> str.include?("/")
=> true
和
irb(main):022:0> str = "foo\xe2\x88\x95"
=> "foo∕"
irb(main):023:0> str.ascii_only?
=> false
irb(main):024:0> str.include?("/")
=> false
在后一个示例中,字符串包含编码为 utf-8 字节的“正斜杠”U+2215
字符。
根据您的具体用例,您可以例如将字符串转换为 ascii 并盲目地用 /
.
str.encode("ascii", "utf-8", replace: "/")
查看 #encode
方法以获得更多选项。