Проверка, определена ли переменная в SASS

Как указано в заголовке, я пытаюсь проверить, определена ли переменная в SASS. (Я использую компас, если это имеет какое-то другое отличие)

Я нашел эквивалент Ruby, который:

defined? foo

Дал выстрел в темноте, но он просто дал мне ошибку:

defined": expected "{", was "?

Я нашел работу (что, очевидно, просто для определения переменной во всех случаях, что в данном случае имеет смысл), но я действительно хотел бы знать, возможно ли это для будущего

Ответ 1

Для Sass 3.3 и более поздних версий

Как и в случае Sass 3.3, существует функция variable-exists(). Из журнал изменений:

  • Теперь можно определить существование различных конструкций Сасса, используя эти новые функции:
    • variable-exists($name) проверяет, разрешена ли переменная в текущей области.
    • global-variable-exists($name) проверяет, существует ли глобальная переменная данного имени....

Пример использования:

$some_variable: 5;
@if variable-exists(some_variable) {
    /* I get output to the CSS file */
}
@if variable-exists(nonexistent_variable) {
    /* But I don't */
}

Для Sass 3.2.x и ранее (мой первоначальный ответ)

Сегодня я столкнулся с одной и той же проблемой: попытался проверить, установлена ​​ли переменная, и если это так добавляет стиль, используя mixin и т.д.

После прочтения функции isset() не будет добавлено в sass, я нашел простую обходную процедуру, используя !default ключевое слово:

@mixin my_mixin() {
  // Set the variable to false only if it not already set.
  $base-color: false !default;

  // Check the guaranteed-existing variable. If it didn't exist 
  // before calling this mixin/function/whatever, this will 
  // return false.
  @if $base-color {
     color: $base-color;
  }
}

Если false является допустимым значением для вашей переменной, вы можете использовать:

@mixin my_mixin() {
  $base-color: null !default;

  @if $base-color != null {
     color: $base-color;
  }
}