문제

다음 논리를 구현하고 싶습니다.

function setMyValue (myVar:int = undefined):void
{
    if (myVar == undefined)
    {
        /* Generate a value for myVar */
    }
    else
    {
        /* Use the supplied value for myVar */
    }
}

따라서 값이 제공되면 사용하십시오. 그렇지 않은 경우 생성하십시오. 충분히 간단해 보입니다.

문제는 AS3가 이것을 좋아하지 않는다는 것입니다. '정의되지 않은'은 '0'으로 강요되므로 Myvar는 정의되지 않습니다. NAN, NULL 등으로 변형을 시도했지만 아무것도 효과가 없었습니다. 내가 오프 핸드를 생각할 수있는 유일한 kludge는 기본적으로 사용할 '마법 번호'를 제공하는 것이지만 추악합니다. 누구든지 더 나은 솔루션을 알고 있습니까?

감사!

도움이 되었습니까?

해결책

upd (내 의견에서) :이 마법 번호가 일부 산술의 결과로 나타나지 않을 것이라고 확신 할 수 없다면 (일반적으로 사실) 따라서 여기서 가장 좋은 방법은보다 넓은 유형을 사용하는 것입니다. int (예 : Number) 또는 깃발을 전달합니다 (Boolean 값) 기능뿐만 아니라 기능 int, 실제 값 부재를 나타 내기 위해. 선택은 통과 된 값이 필수적이라는 사실의 중요성을 강조할지 여부에 따라 달라야합니다.


인수 유형 확장에 익숙하다고 느끼면 사용해야합니다. NaN 그리고 이것을하십시오 :

function setMyValue (myVar : Number = NaN) : void
{
    if ( isNaN(myVar) )
    {
        /* Generate a value for myVar */
    }
    else
    {
        /* Use the supplied value for myVar */
    }
}

그것은 기술적으로 더 정확하고 더 안정적입니다. 또한 컴파일 타임에 강력하게 입력 할 수 있으며 사용하는 경우와 같이 이상한 버그를 유발하지 않습니다. Object.

이것은 작동하지 않습니다 int 답 중 하나가 제안한 것처럼. int 가지다 수치 값 및 NaN 0으로 강요됩니다. Number 유형.

성능이 걱정된다면 -하지 마십시오. 사용 Number 대신에 int 또는 uint 일반적으로 괜찮습니다.


upd : 인수가 없어야한다는 사실을 명시 적으로 표시하려면 추가 플래그와 정확한 유형을 사용하는 것만으로도 훨씬 명확합니다.

function setMyValue (isIntValueSupplied : Boolean = false, intValue : int = 0) : void
{
    if ( isIntValueSupplied )
    {
        /* Generate or use a default value of intValue */
    }
    else
    {
        /* Use the supplied value for intValue */
    }
}

또 다른 옵션은 추가 가치로 자신의 유형을 정의하는 것입니다. MaybeInt, 정수 값과 깃발을 보유하고 있습니다 (실제로 초기화되었는지 여부). 그렇게하면 값이 필수적이거나 가치가 없습니다. 그러나이 접근법은 약간 부피가 클 수 있습니다.

다른 팁

생성 된 값은 const입니까? 그렇다면, 단순히 이것을 기본값으로 사용하지 않겠습니까?

문제는 AS3가 이것을 좋아하지 않는다는 것입니다. '정의되지 않은'은 '0'으로 강요되므로 Myvar는 정의되지 않습니다.

예, 이것은 기본 초기화 값이기 때문에 int (을 위한 string 그리고 Object 이거야 null).

다른 옵션은 매개 변수를 Object 또는 지정되지 않은 상태로 유지하십시오 (a *) 그리고 나중에 typecast int 비 인 경우null.

function setMyValue (myVar:Object = null):void
{
    if (myVar == null)
    {
        /* Generate a value for myVar */
    }
    else
    {
        int value = myVar as int;
        /* Use the supplied value for myVar */
    }
}

내 해결책은 단순히 이것을 사용하는 것이 었습니다

if(myUint == new uint){ is undefined, act appropriately; }
function setMyValue (myVar:int = -1):void
{
    if (myVar == -1)
    {
        /* Generate a value for myVar */
    }
    else
    {
        /* Use the supplied value for myVar */
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top