2017-06-03 62 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語句來檢查的第一個變量:

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

的問題是,我要結束了30+ @if語句列表檢查每個變量。有沒有辦法,我可以檢查$variable1$variable2$variable3$variable5在一個@if聲明,並通過變量名和值代入到錯誤消息的方式嗎?

我唯一的想法迄今已創建另一個變量,它是所有我希望是一個布爾變量的列表,然後做一個@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."; 
    } 
} 

這是一個這樣做的好方法,還是有其他建議?由於

回答

0

對於那些有興趣,我結束了使用地圖變量名稱和類型,然後掛繞然後,注入名稱和類型到錯誤消息。

,但我卻碰到了幾個問題,建立地圖。首先,key不能是變量,因爲這會返回變量值而不是名稱。我通過使用變量的名稱減去$來了解這一點。這使我能夠看到我正在看哪個變量,同時仍以key的形式工作。其次,我需要具有變量的值以及類型。我設置的value對於每一對是另一個地圖,與變量作爲key和類型作爲value。這意味着我可以對這些數據運行另一個循環來檢查這些值。下面是我的地圖是如何構成的一個例子:

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

這有效地返回:

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

當時我能夠在地圖上像這樣運行@each功能:

@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}."; 
     } 
    } 
} 

第一個循環將映射中的每個變量分開,然後第二個循環遍歷變量值和期望的數據類型。然後我使用type-of()來檢查變量的數據類型是什麼,如果與映射中寫入的內容不匹配,則顯示錯誤。我還在第一個循環之後設置了另一個變量,它只是第一個循環中的key,但可以在第二個循環中訪問,以幫助提供錯誤消息中的某些清晰度。

我希望這是不夠清楚別人明白了,他們應該需要做同樣的事情。