【问题标题】:Test whether a Sass function is defined测试是否定义了 Sass 函数
【发布时间】:2014-01-09 12:13:59
【问题描述】:

如何测试 Sass 函数是否存在?


我有一个使用自定义 Sass 函数的 Sass 包。但是,在 Ruby 之外(例如 libsass),可能未定义该函数并提供了一个回退:

url: if($bootstrap-sass-asset-helper, twbs-font-path('name.eot'), 'name.eot')

我想将 $bootstrap-sass-asset-helper 的值设置为 true 或 false,具体取决于是否声明了 twbs-font-path

【问题讨论】:

    标签: sass


    【解决方案1】:

    Sass 没有这样的功能。如果你需要,你可以这样捏造它:

    @debug if(foo() == unquote("foo()"), false, true); // false
    
    @function foo() {
        @return true;
    }
    
    @debug if(foo() == unquote("foo()"), false, true); // true
    

    这是因为当你调用一个不存在的函数时,Sass 假定你可能正在编写有效的 CSS(calc、linear-gradient、attr 等)。当这种情况发生时,你得到的是一个字符串。所以如果函数存在,你会得到函数的结果而不是字符串。所以foo() == unquote("foo()") 只是检查你是否有一个字符串。

    相关:Can you test if a mixin exists?

    【讨论】:

    • 谢谢你的软糖,你能详细说明一下foo() == unquote("foo()")吗?
    • 我已经修改了我的答案,我希望这是有道理的。
    • 感谢您的解释!令人敬畏和骇人听闻的 hack :) 将等待几天才能接受,所以我可以附加赏金。
    【解决方案2】:

    当前版本的 Sass 有一个function-exists 函数。 Full example:

    .foo {
      @if function-exists(myfunc) {
        exists: true;
      }
      @else {
        exists: false;
      }
    }
    

    这是 v3.3(2014 年 3 月)的新功能,因此您可能需要更新 Sass gem 才能使用它。

    Sass v3.3 还添加了其他存在测试:

    variable-exists($name)
    global-variable-exists($name)
    mixin-exists($name)
    

    More on Sass v3.3.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-20
      • 2010-09-11
      • 2022-08-20
      • 1970-01-01
      相关资源
      最近更新 更多