0의 리턴이 좋으면 종속 레코드를 찾을 때 nil에 대해 트래핑하는 것이 지긋합니다. NilClass에 "id"를 추가하여 어떤 종류의 문제가 발생합니까?NilClass 정의
class NilClass
def id
0
end
end
의도하지 않은 결과는 어떻게 될 수 있습니까? 나는 존재에 대해 안다?(). 그러나 어떻게 든 이것이 더 깨끗할지도 모른다라고 생각했다.
의견이 있으십니까?
0의 리턴이 좋으면 종속 레코드를 찾을 때 nil에 대해 트래핑하는 것이 지긋합니다. NilClass에 "id"를 추가하여 어떤 종류의 문제가 발생합니까?NilClass 정의
class NilClass
def id
0
end
end
의도하지 않은 결과는 어떻게 될 수 있습니까? 나는 존재에 대해 안다?(). 그러나 어떻게 든 이것이 더 깨끗할지도 모른다라고 생각했다.
의견이 있으십니까?
정말로 문제가있는 경우 데이터베이스 내부에서 참조 무결성을 사용해야합니다. 당신이 존재하거나 존재 또는 어떤 종류의 오류가 발생하지 않을 수있다 전무에 메소드를 호출해야하는 경우
, 당신은 라 ActiveSupport의 일부가
> nil.id if nil
=> nil
또는 Object#try
이 (요즘 내가 믿는 수표 중 하나를 사용해야합니다 ?), 경고한다 - 나는 그것이 코드 냄새의 종류라고 생각한다. 말했다되고 그건
> nil.try(:id)
=> nil
, 그것은 예기치 않은 무언가를 당신의 프로젝트를 수행했다 새로운 개발자가 기대하는 것을 생각 NilClass을 수정하는 것보다 냄새가 덜합니다.
존재를 확인하려면 "id == 0"을 확인해야합니까? Ruby의 기본 기능을 뛰어 넘는 의도하지 않은 결과는 말할 것도없고 언어 내부를 엉망으로 만들 때 다른 라이브러리 및 핵심 Rails API의 동작을 예측하기가 정말 어려워집니다. 그것은 단지 작동하지 않을 것이라고 말하는 것이 아니라 이 확실합니다.
저는 기본값을 그대로 두었습니다. Ruby가 "if object.association"표현식을 허용하기 때문에 아주 잘 작동합니다.
... "0"을 확인하는 것이 'nil'을 확인하는 것이 더 좋습니다. –
오마르가 제안한 것처럼 사용해보십시오. –