2013-12-20 7 views
4

Как проверить, существует ли функция Sass?Проверьте, определена ли функция Sass

У меня есть пакет Sass, который использует пользовательскую функцию Sass. Однако, за пределами Ruby (например, libsass), что функция может быть определена и предусмотрен запасной вариант:

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

Я хотел бы установить значение $bootstrap-sass-asset-helper к истинным или ложным в зависимости от того, объявляется twbs-font-path.

ответ

10

Текущая версия Sass имеет function-exists функцию. Full example:

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

Это новая функциональность v3.3 (март 2014 г.), так что вам, возможно, потребуется обновить Sass камень, чтобы использовать его.

Sass v3.3 добавляет другие тесты существования тоже:

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

More on Sass v3.3.

+0

Это замечательно, спасибо за подсказку! 3.3 выглядит потрясающе – glebm

6

У Sass нет такой функции. Вы можете фальсифицировать это так, если вам необходимо:

@debug if(foo() == unquote("foo()"), false, true); // false 

@function foo() { 
    @return true; 
} 

@debug if(foo() == unquote("foo()"), false, true); // true 

Это работает потому, что при вызове функции, которая не существует, Sass предполагает, что вы можете писать правильный CSS (известково, линейно-градиент, атр, и т.д.). Когда это произойдет, у вас есть строка. Поэтому, если функция существует, вы получаете результаты функции вместо строки. Итак, foo() == unquote("foo()") просто проверяет, есть ли у вас строка или нет.

Похожие: Can you test if a mixin exists?

+0

Спасибо за выдумки, не могли бы вы подробнее остановиться на 'Foo() == Unquote ("Foo()")' ? – glebm

+0

Я внесла поправки в свой ответ, я надеюсь, что это имеет смысл. – cimmanon

+0

Спасибо за объяснение! Удивительный и ужасный хак :) будет ждать пару дней, прежде чем принимать, чтобы я мог приложить награду. – glebm

Смежные вопросы