跳到主要内容

迭代

Stylus 允许您通过 for/in 结构迭代表达式,形式如下:

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

例如:

body
for num in 1 2 3
foo num

产生的结果为:

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

下面的示例展示了如何使用 <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;
}

这是如何进行常规 for 循环的:

body
for num in (1..5)
foo num

产生的结果为:

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

使用字符串:

for num in (1..10)
.box{num}
animation: box + num 5s infinite

@keframes box{num}
0% { left: 0px }
100% { left: (num * 30px) }

Mixins

我们可以在 mixins 中使用迭代来产生强大的功能。例如,我们可以使用插值和迭代将表达式对应用为属性。

下面我们定义 apply(),有条件地使用所有的 arguments,以支持逗号分隔的和表达式列表:

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)

函数

Stylus 函数也可以包含 for 循环。以下是一些示例用例:

求和:

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"

后缀

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

我们还可以在循环中 返回,下面是一个示例,当 n % 2 == 0true 时返回数字。

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

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