2016-09-15 5 views
0

다음은 slice! (내가 실수하지 않았다면). 루비 2.2.5p319 (2016년 4월 26일 개정 54774) [x86_64에-리눅스]와String.slice! 이상한 결과가 나옴

IRB 세션

파일 "는이"길이의 텍스트 문자열 66173 개 문자가
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> 

. 변수 는이 결과 B 변수 새로운 String에 슬라이스 경우

, 65535 개 문자의 최대 크기가 텍스트 :

문자열 유형의 MySQL의 컬럼에 맞게 손질 할 필요가 올바른 조각에. 변수 이 장소에 슬라이스 경우

638의 길이의 결과로 이상한 일을 할 것으로 보인다. 왜?

누군가가 무슨 일이 일어나는지 설명 할 수 있습니까?

답변

2

slice!

는 STR에서 지정된 부분을 삭제하고, 부분 삭제 반환합니다.

66173 - 65535 
# => 638 

TL; DR : a = slice!(...)a = a.slice(...)는 일치하지이다.

+0

더 세밀한 정의를 읽는 것이 도움이되었을 것입니다. 고맙습니다. – Ross

2

slice!() 메서드는 실제로 문자열을 수정하지만 여전히 유사한 의미를 갖습니다.

a.slice!(0..65534); 

반환하고 0..65534 부분을 삭제하고 나머지 문자를해야합니다.

관련 문제