2011-09-30 2 views
1

나는 이것이 좋은 방법입니다Perl에서 입력을 기반으로 2 가지 유형을 반환하는 함수. 이것은 좋은 접근 방법입니까?

ex: &Foo(12,"count") -> returns record count from DB for value 12 
    &Foo(12,"details") -> returns resultset from DB for value 12 in hash format 

내 질문은 2 개 개의 다른 입력에 따라 유형 매개 변수를 반환 할 수있는 기능을 설계했다? C#에서 함수 오버로드로 수행 할 수 있습니다.

+6

코드가 필요 이상으로 복잡하고 유지 보수가 어렵거나 올바르게 사용하는 것이 어렵습니까? 어떤 부분이 사실이라면 - 나는 그것을 좋은 접근이라고 생각하지 않을 것입니다. –

+0

네, 이해합니다. 그러나 가능한 한 간단하게 유지하고 싶기 때문에이 접근 방법을 시도하고있었습니다. 감사합니다 – KK99

+0

더 많은 정보를 제공해야합니다. 이것들은 단 두 가지 모드입니까, 아니면 더 있습니까? – Zaid

답변

4

Foo(12, "count") 

대신

Foo_count(12) 

함수 이름 ("수가") 자체가 때이 생각할 수있는 유일한 경우라고하여 코드의 어떤 부분을 쉽게 얻을 생각하세요 입력 데이터. 그리고 아마 심지어 함수 테이블 조회 (lookup)를 통해이를 검증하려고 할 것입니다.

명령 이름을 사용하고 전달하는 중간 계층에 대한 것이 아니라면 두 개의 개별 기능을 사용합니다.

또한 Foo 함수의 구현은 명령 이름을보고 모든 명령에 대해 개인 함수로 분할됩니다. 맞습니까?

+0

제안 해 주셔서 감사합니다. – KK99

1

추가적으로 원하는 경우 foo가 세부 정보를 반환하도록하고 싶을 수도 있습니다.

return wantarray ? ($num, @details) : $num; 
+2

배열을 반환하려면 배열의 모든 항목을 동일한 유형 (즉, 개수 및 데이터 항목이 아닌 데이터 항목)으로 만드는 것이 좋습니다. 이 경우에는 호출자가 반환 된 배열을 스칼라 컨텍스트로 평가하여 항목 수를 얻을 수 있으므로 배열과 함께 반환하면 아무 것도 얻을 수 없으므로이 경우에는 두 배가됩니다. –

관련 문제