루비에서 to_s 대 to_str (그리고 to_i / to_a / to_h 대 to_int / to_ary / to_hash)
저는 Ruby를 배우고 있는데, 특히 to_s
vs to_str
(그리고 준비하게 to_i
/ to_int
, to_a
/ to_ary
, & to_h
/ to_hash
) 저를 약간 헷갈리는 몇 가지 방법을 보았습니다 . 내가 읽은 내용 짧은 형식 (예 :) to_s
은 명시 적 변환을위한 것보다 긴 형식은 암시 변환을 홍보 설명합니다 .
to_str
실제로 어떻게 사용 하는지는 잘 모르겠습니다 . String 이외의 것이 정의 to_str
될까요? 이 방법을 실용적으로 적용 할 수 있습니까?
먼저 루비 의 "short"(예 : to_s
/ to_i
/ to_a
/ to_h
) 대 "long"(예 : to_str
/ to_int
/ to_ary
/ to_hash
) 강압 방법의 각 쌍에 적용됩니다 (각 유형에 대해).
그들은 다른 의미를 가지고 있습니다. to_str
object- 가 문자열로 표현할 수있는 것이 아니라 문자열처럼 작동 하지 않는 한 구현해서는 안됩니다 . 구현하는 유일한 핵심 클래스 to_str
는 문자열 자체입니다.
에서 루비 프로그래밍 (에서 인용 이 블로그 게시물 을 모두 읽을 가치가있다)
[
to_i
및to_s
]는 특별히 엄격하지 않습니다. 예를 들어 가지고있는 것이 소유처럼 괜찮은 표현을 가지고 있고 아마도to_s
메소드 가있을 것입니다 ... [to_int
및to_str
] 변환 함수입니다. [사용자] 객체가 자연스럽게 할 수있는 경우에만 구현합니다. 모든 곳에서 사용 가능합니다.
Pickaxe의 이전 Ruby 문서 에는 다음과 같은 내용이 있습니다.
달리
to_s
거의 모든 클래스에서 지원하는 클래스로 클래스to_str
만 같은 역할을 수행합니다.
예를 들어, 아니라뿐만 정수 , 두 플로트 및 숫자 구현 to_int
( to_i
의 등가 to_str
(그들은 모두 실제로 숫자)) 둘 다 쉽게 정수를 대체 할 수 있기 때문에입니다 . 클래스가 String과 비슷하게 접근 한 관계가 아니라면 to_str
.
당신이 구현 / 사용하는 경우는 이해하기 to_s
/ 일부 예시 to_str
에서의 모습을 보자. 제대로 방법이 실패 할 때 고려하는 것이 드러납니다 .
1.to_s # returns "1"
Object.new.to_s # returns "#<Object:0x4932990>"
1.to_str # raises NoMethodError
Object.new.to_str # raises NoMethodError
보시다시피, 어떤 물체라도 문자열로 to_s
바꾸는 것을 기쁘게 생각 합니다. 반면에 어디에있는 변수가 문자열처럼 문자열 to_str
오류를 발생합니다 .
이제 Array#join
.
[1,2].join(',') # returns "1,2"
[1,2].join(3) # fails, the argument does not look like a valid separator.
유용하다 Array#join
전에로 변환하는 그들에 정말 무엇이든 배열의 항목, 그래서 Array#join
통화 to_s
그들에.
그러나 구분 기호는 반드시 있어야합니다. 누군가 호출 [1,2].join(3)
하면 실수를 할 가능성이 있습니다 . 이것이 분리기를 Array#join
호출 to_str
하는 이유 입니다.
다른 방법에도 적용되는 원칙이 적용됩니다. 고려 to_a
/ to_ary
해시에 :
{1,2}.to_a # returns [[1, 2]], an array that describes the hash
{1,2}.to_ary # fails, because a hash is not really an array.
요약하면 다음과 가변합니다.
to_s
패키지를 설명하는 것을 가져 오기 위해 호출 합니다.to_str
구현이 실행됩니다. 작동하는지 확인하기 위해 호출 합니다.to_s
를 설명하는 object-문자열을 작성할 수있을 때 구현 합니다.to_str
이를 구현할 때 완벽하게 동작 할 수 있습니다.
to_str
자신을 구현할 수있는 경우 는 아마도 ColoredString
클래스 일 것입니다. 색상이 붙은 염색입니다. 컬러 쉼표를 이에 통과하는 것을 당신에게 분명히 보인다-plane join
실수하지 않고 초래한다 "1,2"
(해당 문자열이 착색되지 않을지라도), 다음 않는 구현 to_str
ColoredString에.
Zverok는 언제 무엇을하는지에 대한 매우 쉽게 찾을 수 있습니다 (to_h 및 to_hash로 설명 됨).
해당 메소드를 구현하는 객체가 품번-> 사용으로 변환 될 수 있는지 아니면 to_s
어떤 유형 (향상된)이 있는지 확인해야합니다.to_str
to_hash
gem 'configuration' ( GitHub 및 Configuration.rb ) 에서 구성 클래스에 대한 의미있는 사용법을 실제로 보았습니다.
이름에서 알 수있는 구성을 나타냅니다. 실제로는 하나로 변환 할 수있는 것이 아니라 전용 해시 (추가 기능 포함)입니다.
'ProgramingTip' 카테고리의 다른 글
새 사용자 정의 컨트롤을 도구 상자 나 새 Winform에 어떻게 추가 할 수 있습니까? (0) | 2020.11.21 |
---|---|
C ++에서 돌아가는 가장 좋은 방법은 무엇입니까? (0) | 2020.11.21 |
webSocket을 사용하여 특정 사용자에게 메시지를 보내 시나요? (0) | 2020.11.21 |
java.lang.NumberFormatException을 어떻게해야합니까? 입력의 경우 :“N / A”? (0) | 2020.11.21 |
.map () 자바 펼쳐 ES6 맵? (0) | 2020.11.21 |