2016-09-15 3 views
0

以下は、slice!に対して奇妙な結果をもたらす。 (私が間違えていない限り)。String.slice! wierd resultを生成する

ルビー2.2.5p319とIRBセッション(2016年4月26日改訂54774)[x86_64の-のLinux]

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> 

ファイル "" 長さは66173文字の文字列です。変数が、それは結果B変数新しい文字列にスライスされている場合は

、65535文字の最大サイズを持つテキスト:

文字列型のMySQLの列に合うようにトリミングする必要があります正しいスライスで

変数がが所定の位置にスライスされている場合は、の長さになる奇妙なことを行うようです。どうして?

誰かが何が起こっているのか説明できますか?

答えて

2

slice!

STRから指定された部分を削除し、一部が削除返します。

66173 - 65535 
# => 638 

TL; DR:a = slice!(...)a = a.slice(...)と等価ではないあります。

+0

もっと慎重に定義を読むことは助けになりました。ありがとうございました。 – Ross

2

slice!()メソッドは実際には文字列を変更しますが、それでも意味は同じです。

a.slice!(0..65534); 

が戻り、 0..65534部分を削除し、残りの文字を持っています。

関連する問題