Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 检查SASS中是否定义了变量_Ruby_Sass - Fatal编程技术网

Ruby 检查SASS中是否定义了变量

Ruby 检查SASS中是否定义了变量,ruby,sass,Ruby,Sass,正如标题所说,我正在尝试检查SASS中是否定义了变量。(我使用的是指南针,如果这有什么不同的话) 我找到了Ruby等价物,它是: defined? foo 在黑暗中给了我一个机会,但它只是给了我一个错误: defined”:预期为“{”,实际为“ 我已经找到了一个解决办法(很明显,这只是在所有情况下定义变量,在本例中,它实际上更有意义),但我真的很想知道这对于Sass 3.3和更高版本的未来是否可行 从Sass 3.3开始,有一个变量-exists()函数。来自: 现在可以使用以下新功能确定不

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

我找到了Ruby等价物,它是:

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

defined”:预期为“{”,实际为“

我已经找到了一个解决办法(很明显,这只是在所有情况下定义变量,在本例中,它实际上更有意义),但我真的很想知道这对于Sass 3.3和更高版本的未来是否可行 从Sass 3.3开始,有一个
变量-exists()
函数。来自:

  • 现在可以使用以下新功能确定不同Sass结构的存在:
    • 变量存在($name)
      检查变量是否在当前范围内解析
    • 全局变量存在($name)
      检查给定名称的全局变量是否存在。
用法示例:

$some_变量:5;
@如果变量存在(某些变量){
/*我得到CSS文件的输出*/
}
@如果变量存在(不存在_变量){
/*但我不知道*/
}

对于Sass 3.2.x及更早版本(我的原始答案) 今天我遇到了同样的问题:尝试检查是否设置了变量,如果设置了,则添加样式、使用mixin等

在阅读了
isset()
函数后,我发现了一个使用关键字的简单解决方法:

@mixin my_mixin(){
//仅当变量尚未设置时才将其设置为false。
$base color:false!默认值;
//检查保证存在的变量。如果它不存在
//在调用此mixin/function/which之前,将
//返回false。
@如果$base color{
颜色:$基色;
}
}
如果
false
是变量的有效值,则可以使用:

@mixin my_mixin(){
$base color:null!默认值;
@如果$base color!=null{
颜色:$基色;
}
}

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

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

例如:

在specific-variables.scs中,您有:

$brand: "My Awesome Brand";
$brand: company-name !default;
$brand-color: #0074BE !default;
在default-variables.scss中,您有:

$brand: "My Awesome Brand";
$brand: company-name !default;
$brand-color: #0074BE !default;
您的项目是这样构建的:

@导入“specific variables.scss”; @导入“defaultvariables.scss”; @导入“style.scss”


品牌的价值将是我最棒的品牌,品牌颜色的价值将是#0074BE。

如果你要寻找相反的结果,那就是

@if not variable-exists(varname)
要检查它是否未定义或错误:

@if not variable-exists(varname) or not $varname
如果只想在未定义或为空时设置它

$varname: VALUE !default;

你到底想实现什么?当sass中的var未定义时,Compass会删除错误消息。我有一个包含x个主题的cms。所有常见的scss文件都在默认构建路径中,然后在每个主题中,它们都有一个用变量控制所有颜色的文件。理想情况下,我希望这样做,以便放置一些变量是可选的。因此,我需要能够检查是否定义了变量。啊,现在我知道了,谢谢。用默认值(或无值)预先定义可选变量怎么样并在需要更改的主题中重新定义它?damm没有想到这一点。好主意,可能会实现这一点..仍然对检查变量的存在感兴趣ThoughThank!这是教育性的这引发了一个错误“语法错误:Mixin my_Mixin接受0个参数,但传递了1”在SASS 3.2.12上,当您尝试传递参数时,您需要定义参数:)。
@mixin my_mixin($my_arg){}
。有关完整的解释,请参阅SASS文档。请注意,变量参数不应使用
$
。因此
@如果变量存在(我的变量)
而不是
@如果变量存在($my变量)
。一开始我被绊倒了,我想这对其他找到这个答案的人会有帮助。@如果不存在变量(none\u一些变量)就会修复