L3F.WIN

Github及Hexo的使用

0%

学习stylus【10】迭代(Iteration)

迭代(Iteration)

Stylus允许你通过for/in对表达式进行迭代形式如下:

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

例如:

1
2
3
4
5
6
7
8
9
body
for num in 1 2 3
foo num
=>
body {
foo: 1;
foo: 2;
foo: 3;
}

下面这个例子演示了如何使用

1
2
3
4
5
6
7
8
9
10
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)

我们可以在混写中使用循环实现更强大的功能,例如,我们可以把表达式对作为使用插值和循环的属性。
下面,我们定义 apply(), 利用所有的arguments,这样逗号分隔以及表达式列表都会支持。

1
2
3
4
5
6
7
8
9
10
11
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)

函数(Functions)

Stylus函数同样可以包含for循环。下面就是简单使用示例:
求和:

1
2
3
4
5
6
7
sum(nums)
sum = 0
for n in nums
sum += n

sum(1 2 3)
// => 6

连接:

bash
1
2
3
4
5
6
7
8
9
10
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也可以。如下后缀解析的例子:

1
2
3
4
5
6
7
8
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 == 0为true的时候返回数值。

1
2
3
4
5
first-even(nums)
return n if n % 2 == 0 for n in nums

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