Stylus 迭代

2023-09-11 15:52 更新

迭代(Iteration)

迭代

Stylus允許你通過for/in對表達(dá)式進(jìn)行迭代形式如下:

for <val-name> [, <key-name>] in <expression>

例如:

body
  for num in 1 2 3
    foo num

生成:

body {
  foo: 1;
  foo: 2;
  foo: 3;
}

下面這個(gè)例子演示了如何使用<key-name>:

body
  fonts = Impact Arial sans-serif
  for font, i in fonts
    foo i font

生成為:

body {
  foo: 0 Impact;
  foo: 1 Arial;
  foo: 2 sans-serif;
}
混合書寫(Mixins)

我們可以在混寫中使用循環(huán)實(shí)現(xiàn)更強(qiáng)大的功能,例如,我們可以把表達(dá)式對作為使用插值和循環(huán)的屬性。

下面,我們定義apply(), 利用所有的arguments,這樣逗號分隔以及表達(dá)式列表都會(huì)支持。

apply(props)
  props = arguments if length(arguments) > 1
  for prop in props
    {prop[0]} prop[1]

body
  apply(one 1, two 2, three 3)

body
  list = (one 1) (two 2) (three 3)
  apply(list)
函數(shù)(Functions)

Stylus函數(shù)同樣可以包含for循環(huán)。下面就是簡單使用示例:

求和:

sum(nums)
  sum = 0
  for n in nums
    sum += n

sum(1 2 3)
// => 6

連接:

join(delim, args)
  buf = ''
  for arg, index in args
    if index
      buf += delim + arg
    else
      buf += arg

join(', ', foo bar baz)
// => "foo, bar, baz"
后綴(Postfix)

就跟if/unless可以利用后面語句一樣,for也可以。如下后綴解析的例子:

sum(nums)
  sum = 0
  sum += n for n in nums


join(delim, args)
  buf = ''
  buf += i ? delim + arg : arg for arg, i in args

我們也可以從循環(huán)返回,下例子就是n % 2 == 0為true的時(shí)候返回?cái)?shù)值。

first-even(nums)
  return n if n % 2 == 0 for n in nums

first-even(1 3 5 5 6 3 2)
// => 6


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號