2017-06-03 6 views
1

ユーザが変更した後、正しいフォーマットであることを確認するために必要なSASS変数が多数作成されています。SASSの複数変数のタイプをチェックする方法

例えば、私は、次の変数があります:あなたが見ることができるように

$varible1: true; 
$variable2: false; 
$variable3: true; 
$variable4: "400, 500, 600"; 
$variable5: true; 
$variable6: "foo bar buzz"; 
$variable7: 4; 
$variable8: 9; 
etc... 

を、すべてではない私の変数はブールある、いくつかはあまりにも数字や文字列です。しかし、各変数は常に特定の型になると予想されます($variable5は常にブール値などでなければなりません)。私がしたいのは、それぞれの変数のタイプをチェックし、それが間違っているとエラーメッセージを出すことです。

@if type-of($variable1) != bool { 
    @error "'#{$variable1}' is not a valid value for $variable1, you must use a boolean."; 
} 

問題がある、私は各変数を確認するために30+ @if文のリストで終わるつもりです:私は、最初の変数を確認するには、次の@ifの文を書かれています。 @ifステートメントで$variable1$variable2$variable3および$variable5をチェックし、変数名と値をエラーメッセージに渡す方法はありますか?

私の唯一のアイデアは、これまでのようなもの、私はブールなり、その後、その上に@eachループを行うことを期待するすべての変数のリストである別の変数を作成することがあります。

$boolean-variables: $variable1, $variable2, $variable3... 
@each $var in $boolean-variables { 
    @if type-of($var) != bool { 
     @error "'#{$var}' is not a valid value for $var, you must use a boolean."; 
    } 
} 

は、このAでありそれを行う良い方法、または他の提案はありますか?ありがとう

答えて

0

興味のある人は、変数名と型のマップを使用して終了し、ループして名前と型をエラーメッセージに挿入しました。

私はマップを設定するいくつかの問題にぶつかった。まず、keyは変数ではありません。これは名前ではなく変数の値を返すためです。私は$を差し引いた変数の名前を使用してこれを取得しました。これにより、私はまだ変わらない部分を見ていましたが、まだkeyとして働いていました。第二に、私は変数の値だけでなく、タイプを持つ必要がありました。各ペアのvalueを別のマップに設定し、変数をkey、タイプをvalueとしました。つまり、これらの値をチェックするために、このデータに対して別のループを実行することができました。以下は私のマップが構造化された方法の例です:

$setting-types: (
    variable-name1: ($variable-name1: bool), 
    variable-name2: ($variable-name2: bool), 
    variable-name3: ($variable-name3: list) 
} 

これが効果的に返します。

@each $setting, $data in $setting-types { 
    $setting-name: $setting; 
    @each $variable, $type in $data { 
     @if type-of($variable) != $type { 
      @error "'#{$variable}' is not a valid value for $#{$setting-name}, you must use a #{$type}."; 
     } 
    } 
} 

$setting-types: (
    variable-name1: (true: bool), 
    variable-name2: (false: bool), 
    variable-name3: (foo, bar, buzz: list) 
} 

を、私はそのようにようにマップ上@each機能を実行することができました

最初のループはマップ内の各変数を分割し、2番目のループは変数値と予想されるデータ型を超えます。次に、type-of()を使用して変数のデータ型が何であるかを確認し、マップに書かれているものと一致しない場合は、エラーが表示されます。私はまた、最初のループの後に別の変数を設定します。これは最初のループのちょうどkeyですが、2番目のループでアクセスしてエラーメッセージに明快さを与えることができます。

これは、他の人が理解できるほど明確であることを望みます。同様のことを行う必要がある場合は、

関連する問題