检查是不是在 SASS 中定义了变量

Posted

技术标签:

【中文标题】检查是不是在 SASS 中定义了变量【英文标题】:Checking if a variable is defined in SASS检查是否在 SASS 中定义了变量 【发布时间】:2012-01-20 17:14:58 【问题描述】:

正如标题所说,我正在尝试检查变量是否在 SASS 中定义。 (如果这有什么不同,我会使用指南针)

我找到了 Ruby 等价物:

defined? foo

在黑暗中试了一下,但它只是给了我错误:

defined": expected "", was "?

我找到了一种解决方法(这显然只是在所有情况下定义变量,在这种情况下它实际上更有意义)但我真的很想知道这在未来是否可行

【问题讨论】:

您到底想达到什么目的?未定义 sass 中的 var 时 Compass 丢弃错误消息。 我有一个包含 x 个主题的 cms。所有常见的 scss 文件都在默认构建路径中,然后在每个主题中它们都有一个文件,该文件控制所有带有变量的颜色。理想情况下,id 喜欢这样做,以便放置一些变量是可选的。因此我需要能够检查是否定义了变量 啊,我明白了,谢谢。使用默认值(或无值)预定义可选变量并在需要更改的主题中重新定义它呢? 该死的没想到。好主意,可能会实现.. 仍然对检查变量的存在感到好奇 【参考方案1】:

如果你正在寻找相反的,它是

@if not variable-exists(varname)

检查它是否未定义或虚假:

@if not variable-exists(varname) or not $varname

如果你只想在它未定义或为空时设置它

$varname: VALUE !default;

【讨论】:

【参考方案2】:

作为补充答案 - 对于某些用例,您应该查看 default 关键字。它使您可以为尚未定义的变量分配默认值。

如果变量尚未分配,您可以通过添加 !default 标志到值的末尾。这意味着,如果 变量已经被赋值,它不会被重新赋值,但是如果 它还没有值,它会被赋予一个。

例子:

在 specific-variables.scss 你有:

$brand: "My Awesome Brand";

在 default-variables.scss 你有:

$brand: company-name !default;
$brand-color: #0074BE !default;

您的项目是这样构建的:

@import "特定变量.scss"; @import "默认变量.scss"; @import "style.scss";

品牌的价值是My Awesome Brand,品牌颜色的价值是#0074BE

【讨论】:

【参考方案3】:

适用于 Sass 3.3 及更高版本

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

现在可以使用这些新函数来确定不同 Sass 结构的存在: 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;
  

【讨论】:

谢谢!这是有教育意义的 当您尝试传递参数时,这会在 SASS 3.2.12 上引发错误“语法错误:Mixin my_mixin 接受 0 个参数但传递了 1 个”。 你需要定义参数然后:)。 @mixin my_mixin($my_arg) 。有关完整说明,请参阅 Sass 文档。 注意变量参数不能使用$。所以@if variable-exists(my-variable) 不是@if variable-exists($my-variable)。起初这让我感到困惑,认为这对找到此答案的其他人会有所帮助。 @if not variable-exists(none_some_variable) 将修复

以上是关于检查是不是在 SASS 中定义了变量的主要内容,如果未能解决你的问题,请参考以下文章

检查是不是定义了变量?

检查变量是不是在python中定义的简单方法? [复制]

如何检查R的参数(...)中是不是定义了任何变量?

如何检查树枝中的变量是不是等于零并定义值

检查自定义类列表中是不是存在变量[重复]

如何在 Perl 中检查多个变量是不是为空