函式值

相容性(參數類型)
Dart Sass
LibSass
自 3.5.0 版本起
Ruby Sass
自 3.5.0 版本起

在舊版的 LibSass 和 Ruby Sass 中,call() 函式接受一個表示函式名稱的字串。為了新的模組系統(其中函式不再是全域的,因此給定的名稱可能並不總是引用相同的函式)做準備,這已更改為接受函式值。

將字串傳遞給 call() 在所有實現中仍然有效,但已被棄用,並將在未來的版本中被禁止。

函式也可以是值!您不能直接將函式寫成值,但您可以將函式的名稱傳遞給 meta.get-function() 函式以將其作為值取得。取得函式值後,您可以將其傳遞給 meta.call() 函式來呼叫它。這對於編寫呼叫其他函式的 *高階函式* 非常有用。

程式碼遊樂場

SCSS 語法

@use "sass:list";
@use "sass:meta";
@use "sass:string";

/// Return a copy of $list with all elements for which $condition returns `true`
/// removed.
@function remove-where($list, $condition) {
  $new-list: ();
  $separator: list.separator($list);
  @each $element in $list {
    @if not meta.call($condition, $element) {
      $new-list: list.append($new-list, $element, $separator: $separator);
    }
  }
  @return $new-list;
}

$fonts: Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans-serif;

.content {
  @function contains-helvetica($string) {
    @return string.index($string, "Helvetica");
  }
  font-family: remove-where($fonts, meta.get-function("contains-helvetica"));
}
程式碼遊樂場

Sass 語法

@use "sass:list"
@use "sass:meta"
@use "sass:string"

/// Return a copy of $list with all elements for which $condition returns `true`
/// removed.
@function remove-where($list, $condition)
  $new-list: ()
  $separator: list.separator($list)
  @each $element in $list
    @if not meta.call($condition, $element)
      $new-list: list.append($new-list, $element, $separator: $separator)


  @return $new-list


$fonts: Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans-serif

.content
  @function contains-helvetica($string)
    @return string.index($string, "Helvetica")

  font-family: remove-where($fonts, meta.get-function("contains-helvetica"))

CSS 輸出

.content {
  font-family: Tahoma, Geneva, Arial, sans-serif;
}