全局变量exists正在触发Sass中的错误

全局变量exists正在触发Sass中的错误,sass,compass-sass,Sass,Compass Sass,我使用了一个三元类语句来初始化Sass中的变量。这允许我将一些默认变量设置为Zurb基金会正在使用的相同的东西,但是如果我决定不包括基础模块,那么事情就不应该落到他们的头上。 $nav-link-icon-color: if( global-variable-exists($topbar-link-color), $topbar-link-color, #fff) !default; 在我升级到Sass 3.4之前,它一直运行良好。紧接着,我开始出现以下错误: error sass/style

我使用了一个三元类语句来初始化Sass中的变量。这允许我将一些默认变量设置为Zurb基金会正在使用的相同的东西,但是如果我决定不包括基础模块,那么事情就不应该落到他们的头上。
$nav-link-icon-color: if( global-variable-exists($topbar-link-color), $topbar-link-color, #fff) !default;
在我升级到Sass 3.4之前,它一直运行良好。紧接着,我开始出现以下错误:

error sass/style.scss (Line 20 of sass/partials/_navigation-icons.scss: $name: #ffffff is not a string for `global-variable-exists')
检查时,
$topbar链接颜色
已初始化。它是一个值为#fff的字符串,由基金会声明如下:

$topbar-link-color: #fff !default;
我甚至尝试将未初始化的变量传递到
global-variable-exists()

但Sass也不喜欢这样:

error sass/style.scss (Line 21 of sass/partials/_navigation-icons.scss: Undefined variable: "$happy-scrappy".)
这对我来说很奇怪,因为
global-variable-exists()
的整个要点就是检查变量是否存在。似乎发送到
global-variable-exists()
的参数没有被正确解析,但我不知道

我尝试卸载所有版本的Sass和Compass,然后重新安装,最后重新启动,但都没有用。我甚至回到了我以前使用的Sass 3.3.14,同样的错误仍然存在

罗盘1.0.1 Sass 3.4.0 基金会5.3.3 ruby 2.0.0p481 Win7 64位

编辑:进一步研究后,我的错误做法是在sass 3.2.19和compass 0.12.2中工作。

问题仍然存在,因为您使用的函数不正确。该图清楚地说明了如何使用该功能:

$a-false-value: false;
// global-variable-exists(a-false-value) => true

.foo {
  $some-var: false;
  @if global-variable-exists(some-var) { /* false, doesn't run */ }
}
查看如何不向函数传递变量?这是因为它需要一个包含变量名的字符串,而不是变量本身。传入变量本身会破坏函数的用途:不能将不存在的变量传递给函数或mixin

所以。。。只需放下
$

$nav-link-icon-color: if( global-variable-exists(topbar-link-color), $topbar-link-color, #fff) !default;

非常感谢你!这就解决了。你说得对。我完全忽视了放弃美元的必要性。似乎我做这件事的不正确方式是在一个比较旧的compass和sass的组合上偶然工作。这也让我感到困惑——我猜想他们只是想插入变量名
$nav-link-icon-color: if( global-variable-exists(topbar-link-color), $topbar-link-color, #fff) !default;