以下为切片产生奇怪的结果! (除非我犯了错误。)
与ruby 2.2.5p319(2016-04-26修订版54774)[x86_64-linux] 的irb会话irb(main):001:0> a= File.read(',a');nil
=> nil
irb(main):002:0> a.class.name
=> "String"
irb(main):003:0> a.size
=> 66173
irb(main):004:0> b=a.slice(0..65534);nil
=> nil
irb(main):005:0> b.size
=> 65535
irb(main):006:0> a.slice!(0..65534);nil
=> nil
irb(main):007:0> a.size
=> 638
irb(main):008:0>
where file",a"是一个长度为66173个字符的文本字符串。
需要修剪字符串以适合类型为:text的mysql列,其最大大小为65535个字符,
如果将变量 a 切成新的String变量 b ,则会产生正确的切片。
如果变量 a 被切片到位,似乎做了奇怪的事情,导致 638 的长度。为什么?
有人可以解释发生了什么吗?
答案 0 :(得分:2)
slice!
从str中删除指定的部分,并返回已删除的部分。
66173 - 65535
# => 638
tl; dr:a = slice!(...)
等同于a = a.slice(...)
。
答案 1 :(得分:2)
slice!()
方法确实修改了字符串,但仍然有类似的语义。
a.slice!(0..65534);
将返回并删除 0..65534部分,并且将包含其余字符。