正如标题所说,我试图判断SASS中是否定义了变量.(如果罗盘有什么不同,我会用它)

我找到了Ruby的类似功能:

defined? foo

在黑暗中给了我一个机会,但它只是给了我一个错误:

defined": expected "{", was "?

我已经找到了一个解决办法(显然,这只是在所有情况下定义变量,在本例中,它实际上更有意义),但我真的很想知道这在future 是否可行

推荐答案

适用于Sass 3.3及更高版本

从Sass 3.3开始,有一个variable-exists()函数.从the changelog开始:

  • It is now possible to determine the existence of different Sass constructs using these new functions:
    • 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()函数isn't going to be added to sass之后,我发现了一个使用!default关键字的简单解决方法:

@mixin my_mixin() {
  // Set the variable to false only if it's 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;
  }
}

Ruby相关问答推荐

获取用于传递参数的变量名称

RSpec 中有没有一种方法可以同时断言调用次数和参数列表?

Ruby ERB 类给出未定义的局部变量或方法,但 erb 解析良好

回声ABC | ruby -p -e "sub('a','A').sub('b', 'B')": 为什么不是 "ABc"?

有没有办法在 Capybara 中保持登录状态?

如果 Java 人go Scala,C# go F#,那么 Ruby 人go 哪里寻求函数式?

如何在新行之间拆分字符串并保留空白行?

Rspec: expectvsexpect什么区别?

Ruby 中的 Object 和 BasicObject 有什么区别?

如何删除字符串中的重复空格?

object_id 分配如何工作?

如何在运行时判断 Ruby 中的 Gem 版本?

获取Ruby中数组的差异

Sublime Text 2 控制台输入

如何在Ruby中获取给定月份的天数,占年份?

计算文件中的行数而不将整个文件读入内存?

OpenSSL vs GPG 用于加密异地备份?

遍历数组的前 n 个元素

Ruby:如何计算一个字符串在另一个字符串中出现的次数?

通过多个分隔符拆分字符串