루비로 표시된 개체 유형 결정
제가 찾고 있는 것의 예로 파이썬을 사용하겠습니다(파이썬을 모르신다면 유사 코드라고 생각하셔도 됩니다).
>>> a = 1
>>> type(a)
<type 'int'>
루비로 제가 할 수 있다는 것을 압니다.
1.9.3p194 :002 > 1.class
=> Fixnum
하지만 이것이 물체의 종류를 결정하는 적절한 방법일까요?
루비 세계에서 흔들리는 용어인 물체의 "유형"을 결정하는 적절한 방법은 호출하는 것입니다.object.class
.
클래스가 다른 클래스에서 상속될 수 있으므로 개체가 "특정 유형"인지 확인하려면 호출할 수 있습니다.object.is_a?(ClassName)
확인하기 위해object
유형의ClassName
또는 그것으로부터 파생됩니다.
일반적으로 형식 검사는 루비에서 수행되지 않지만, 대신 객체는 일반적으로 "덕 타이핑"이라고 불리는 특정 방법에 응답하는 능력을 기반으로 평가됩니다.즉, 원하는 방법에 반응한다면 그 유형에 대해 특별히 신경 쓸 이유가 없습니다.
예를들면,object.is_a?(String)
다른 클래스가 이 클래스를 문자열로 변환하는 메서드를 구현하거나 문자열이 동작하는 방식과 동일하게 동작하도록 만들 수 있기 때문에 너무 경직되어 있습니다. object.respond_to?(:to_s)
문제의 객체가 사용자가 원하는 것을 수행하는지 테스트하는 더 나은 방법입니다.
다음을 시도할 수도 있습니다.
p 1.instance_of? Fixnum #=> True
p "1".instance_of? String #=> True
p [1,2].instance_of? Array #=> True
종종 루비에서는 객체의 클래스가 무엇인지 실제로는 신경쓰지 않고, 그 자체로 특정한 방법에 반응하는 것에 신경을 씁니다.이것은 Duck Typing으로 알려져 있으며 모든 종류의 Ruby 코드베이스에서 볼 수 있습니다.
따라서 많은 경우(대부분은 아닐지라도) 다음을 사용하여 덕 타이핑을 사용하는 것이 가장 좋습니다.
object.respond_to?(:to_i)
저는 "네"라고 말할 것입니다.Matz는 그의 강연 중 하나에서 이렇게 말했습니다. "루비 물체는 유형이 없습니다."전부가 아니라 그가 우리에게 전달하려는 부분입니다.그럼 왜 "모든 것은 물체입니다"라고 말했을까요?추가하기 위해 "데이터에는 객체가 아닌 유형이 있습니다"라고 말했습니다.
RubyConf 2016 - 마츠모토 유키히로의 오프닝 기조연설.
하지만 루비는 수업만큼 사물의 종류에 신경 쓰지 않습니다.우리는 유형이 아닌 수업을 사용합니다.모든 데이터에는 클래스가 있습니다.
12345.class
'my string'.class
클래스에도 조상이 있을 수 있습니다.
Object.ancestors
메타 수업도 있지만 자세한 내용은 저장해 두겠습니다.
클래스를 알고 나면 클래스에 사용할 수 있는 방법을 찾을 수 있습니다.여기서 "데이터 유형"이 필요합니다.자세히 알아보려면 검색을...
"루비 오브제 모델"
이것은 Ruby가 객체를 처리하는 방법에 사용되는 용어입니다.모두 내부적인 것이기 때문에 잘 보이지는 않지만 알게 되어 기쁩니다.하지만 그것은 다른 주제입니다.
예! 클래스가 데이터 형식입니다.개체에는 클래스가 있고 데이터에는 유형이 있습니다.따라서 데이터베이스에 대해 알고 있다면 유한한 유형 집합만 있다는 것을 알 수 있습니다.
텍스트 블록 번호
variable_name.class
여서변이수 "a" 다니은입름"입니다.a.class
모든 변수에는 이름 클래스가 있는 소품이 있습니다.인쇄하면 어떤 유형인지 알 수 있으므로 다음과 같이 하십시오.
puts a.class
언급URL : https://stackoverflow.com/questions/15769739/determining-type-of-an-object-in-ruby
'programing' 카테고리의 다른 글
XPath를 BeautifulSoup과 함께 사용할 수 있습니까? (0) | 2023.07.18 |
---|---|
변수가 없음 또는 numpy.array인지 확인할 때 ValueError가 발생했습니다. (0) | 2023.07.18 |
SQL Server, Excel "링크된 서버"에 삽입할 때 "잘못된 열 이름" 오류가 발생 (0) | 2023.07.13 |
yerr/xerr을 오차 막대가 아닌 음영 영역으로 표시 (0) | 2023.07.13 |
특정 환경을 위한 springyml 파일 (0) | 2023.07.13 |