답변:
코드 스타일 규칙입니다. 메소드가 부울 값을 리턴 함을 나타냅니다.
물음표는 메소드 이름 끝에 유효한 문자입니다.
?
Ruby에서 다른 몇 가지 용도 가 있습니다 (삼항 연산자, 문자를 ASCII 정수로 변환 test
,에서 사용 , RegEx 등에서 사용).
isEmpty()
, isDigit()
등에서 루비, 같은 방법이 기록 될 것입니다 empty?
, 그리고 digit?
꽤 비트 좋네요은 IMO이다.
is
. 항상 사용 합니다. 물음표가 다음에 사용 된 이후 Swift에서 온 누군가에게는 매우 혼란 스러울 수 있습니다 nullable
.)
귀하의 예에서는 메소드 이름의 일부입니다. 루비에서는 메소드 이름에 느낌표를 사용할 수도 있습니다!
Ruby에서 물음표의 또 다른 예는 삼항 연산자입니다.
customerName == "Fred" ? "Hello Fred" : "Who are you?"
당신의 예에서
product.valid?
실제로 함수 호출이며라는 함수를 호출합니다 valid?
. 특정 유형의 "조건 테스트"/ 부울 함수에는 규칙에 따라 함수 이름의 일부로 물음표가 있습니다.
?
s는 변수가 아닌 메소드 이름에서만 허용 된다는 점을 지적 할 가치가 있습니다 . Ruby를 배우는 과정 ?
에서 부울 리턴 유형 을 지정 했다고 가정 하여 변수를 플래그로 지정하여 오류를 유발했습니다. 이로 인해 ?
s 와 관련된 특별한 구문이 있다고 잠시 동안 믿었습니다 .
나는 그것이 부울 한 것들에 대한 관습이라고 생각합니다. " IsValid
" 라고 말하는 것과 비슷 합니다.
또한 Kernel # test 에서 테스트 메소드 의 첫 번째 인수와 함께 사용하는 것이 일반적입니다.
irb(main):001:0> test ?d, "/dev" # directory exists?
=> true
irb(main):002:0> test ?-, "/etc/hosts", "/etc/hosts" # are the files identical
=> true
이 질문 에서 볼 수 있듯이
test
, ?d
바로 가기입니다 "d"
. test
한 문자 문자열을 첫 번째 인수로 사용하므로 test ?d, "/dev"
또는로 호출 할 수 있습니다 test "d", "/dev"
.