문제

가능한 중복:
루비 1.9 배열입니다.to_s 다르게 동작?

누가 말할 수 있는 나에게 무엇을 변경 사 루비 1.8.7 와 루비 1.9.3.나는 예 아래에 나열된 동작하는 완전히 다른에서 2 개의 버전에 따라 루비 문서는 나타나지 않도 변경 사이의 이러한 버전이 있습니다.

Ruby1.8

number = '123-45-6789' 
# => "123-45-6789"
number.scan(/[0-9]/)
# => ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
number.scan(/[0-9]/).to_s
# => "123456789"

루비 1.9

number = '123-45-6789'
# => "123-45-6789" 
number.scan(/[0-9]/)
# => ["1", "2", "3", "4", "5", "6", "7", "8", "9"]    
number.scan(/[0-9]/).to_s
# => "[\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"]"

지 않고 다른 방법이 궁금 변경된 것과 같이 두 가지 버전이 있습니다.

도움이 되었습니까?

해결책

여기에 실제로는 루비 소스 코드:

1.8.7:

rb_ary_to_s(ary)
    VALUE ary;
{
    if (RARRAY(ary)->len == 0) return rb_str_new(0, 0);
    return rb_ary_join(ary, rb_output_fs);
}

다시 말해서 1.8.7, to_s 전화 join.

1.9.3:

rb_ary_inspect(VALUE ary)
{
    if (RARRAY_LEN(ary) == 0) return rb_usascii_str_new2("[]");
    return rb_exec_recursive(inspect_ary, ary, 0);
}

VALUE
rb_ary_to_s(VALUE ary)
{
    return rb_ary_inspect(ary);
}

다시 말해서 1.9.3, to_sinspect.

참고:에서 미래,당신에 대해 궁금한 차이가 당신이 관찰하는 두 가지 버전 시도할 수 있습니다 살펴보고 소스 코드입니다.쉽게 풀에서 아래로 여기: https://github.com/ruby/ruby

모든 것을 쉽게 찾을 수 있지만,당신이 주위를 검색한 자주 찾을 수 있는 좋은 지도한다.이 경우에, array.c 은 당신이 무엇을 찾고 있습니다.

그런 다음 전환할 수 있습니다 사이에 앞뒤로 버전을 발행하여 git checkout ruby_1_8_7git checkout ruby_1_9_3.

다른 팁

to_s 변경되었습니다 실제로 무엇을 변환하는 개체를 문자열해야 할 것입니다.

을 고려 1.8 구현...

  1. 을 보낼 때를 to_s 는 방법을 배열체,그것은 말 그대로지 array_object.join('').to_s.이 이럴 않습니다 너무 많은.
  2. 이 구현한 구역에서 무선 인터넷을 무료로 배열 개체입니다.이 to_s 방법으로 주로가에서 손으로 inspect 방법(_correct 날 내가 잘못하기 때문에 나는 내 머리를 여기에).면 당신이 찾아야에서의 출력 to_s 방법,여기에 당신에게 말할 수 없는 경우에는 개체의 Array, StringFixnum 클래스입니다.

입력 1.9 구현...

  1. 구조물의 출력을 명확히 보여주는 객체가 배열입니다.

는 말이라고 생각했 UX 디자인을 결정에서 루비 팀기 때문에 to_s 에 1.8 은 상당히 빠르다!

이것을 고려 microbenchmark...

OS_X_Terminal $> time ruby -e "(1..1000000).to_a.map(&:to_s).to_s"

| Ruby Version | average runtime |
|    1.9.3     |      1.678      |
|    1.9.2     |      1.817      |
|    1.8.7     |      1.106      |

이것은 모두가 지금까지.댓글은 언제나 환영합니다(:

루비가 .to_s가하는 것에 대해 더 똑똑해 보이는 것처럼 보입니다.그것은 벙어리가되어야하며 어떤 이유로 어레이의 모든 항목이 나란히 나란히 나열합니다.Ruby 1.9에서는 배열이 필요하며 문자 그대로 문자열로 바뀝니다.그것이 똑똑한 똑똑한 방식으로 .to_s를 처리하는 방법입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top