2016-09-15 71 views
0

以下產生一個奇怪的結果切片! (除非我犯了一個錯誤)。String.slice!產生奇怪的結果

紅寶石2.2.5p319(2016年4月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> 

其中file 「a」 是長度的文本串66173個字符。

字符串需要被修整,以適合類型的一個MySQL柱:文本,其具有65535個字符的最大大小,

如果變量一個切片到一個新的字符串變量b它導致在一個正確的切片。

如果變量一個到位切片,似乎做導致長度奇怪的事情。爲什麼?

有人可以解釋發生了什麼?

回答

2

slice!

刪除從STR指定部分,並返回部分刪除。

66173 - 65535 
# => 638 

TL; DR:a = slice!(...)相當於a = a.slice(...)

+0

仔細閱讀定義會有幫助。謝謝。 – Ross

2

slice!()方法實際上修改了字符串,但仍具有類似的語義。

a.slice!(0..65534); 

將返回和刪除部分0..65534和將剩餘的字符。

相關問題