unit-value-for-type (マクロ)
パッケージ: CURL.LANGUAGE.COMPILER

指定 type の単位の値を返します。

シグネチャ

{unit-value-for-type type}

説明

スカラー型の場合、数値が 1 の指定 type のインスタンスを返します。Distance などの数量型の場合、値はその型の基本単位で表現されます。たとえば、Distance ではメートルになります。
Vector2d-of などの数値ベクトル型の場合、ベクトル型そのものではなく、そのパラメータ型の単位の値を返します。次の例では、
{unit-value-for-type {Vector2d-of Time}}
{{Vector2d-of Time} 1s, 1s} ではなく、Time の値 1s が生成されます。
値をその型の単位の値で割ると、その値の単位なしバージョンが生成されます。これは SI-value で生成される値と同じですが、この場合はベクトルにも使えます。下記の例を参照してください。
type が数値スカラー型またはベクトル型のいずれでもない場合はエラーがスローされます。

プログラミング注意事項

コードを記述する際に数量型がわかっている場合は、該当するリテラル値を使う方が unit-value-for-type よりも明確です。たとえば、{unit-value-for-type Time} ではなく簡単に 1s と記述するようにします。
コードの記述時に正確な数量型が不明の場合は unit-value-for-type を使用します。


例: unit-value-for-type の使用による単位なしの値の生成
{define-proc {unitless-value x:any}:any
    {return x / {unit-value-for-type {type-of x}}}
}
{value
    let box:VBox = {VBox}
    {for val in {Array 2min, {Distance2d 1ft, 2ft}} do
        {box.add
            {paragraph
                {value val} without units is {unitless-value val}
            }
        }
    }
    box
}