Stylus 函数
-
返回值
Stylus 具有强大的内置于语言层面的函数定义。函数定义与混入(mixins)一致,但是却可以返回值。一个很简单的例子:创建一个两数相加的函数。我们可以将上述函数用在条件表达式中、作为属性值等等。输出为:Stylus 函数可以返回多个值,就像你给一个变量赋予多个值一样。例如,下面就是一个有效的赋值:类似的,我们可以在函数中返回多个值:当返回值是标识符时是个小小的例外。例如,下面的代码对于 Stylus 来说看上去好像一个属性赋值(但是没有赋值操作符):为避免歧义,我们可以使用括号,或是 return 关键字: -
默认参数
可选参数可以赋值一个表达式。在 Stylus 中,我们甚至可以使用参数列表中左侧的参数为右侧参数赋予默认值!例子:注意:因为参数默认是赋值,因此我们可以使用函数调用作为默认值:函数可以接受命名参数。这可以免去记忆参数顺序的麻烦,或者说是提供了代码的可读性。 -
函数体
我们把 add() 函数做进一步的扩展。通过内置 unit() 函数把所有参数的数值单位都变成 px。因为它为每个参数重新赋值了,并且每个参数都提供了字符串标识数值单位类型,因此,可以无视单位换算的内部机制。将函数名赋值给一个新的标识符就为其创建了一个别名。例如,我们前面定义的 add() 函数就可以起一个别名叫做 plus(),如下所示:函数可以接受命名参数。这可以免去记忆参数顺序的麻烦,或者说是提供了代码的可读性。与为函数起 “别名” 一样,我们可以将函数作为参数传递。如下, invoke() 函数能够接收一个函数作为参数,因此我们可以将 add() 或 sub() 函数作为参数传递给 invoke()。生成:arguments 是所有函数体都能够访问的局部变量,包含了传递过来的所有参数。 -
条件
假设我们想要创建一个名为 stringish() 的函数,用来决定参数是否可以转换为字符串。我们检查 val 是否是字符串或缩进(类似字符)。由于未定义的标识符将其自身作为值,因此我们就可以像下面一样对其自身进行比较(使用 yes 和 no 代替 true 和 false):用法:注意: yes 和 no 并不是布尔字面量(boolean literals)。他们在这里只是简单的未定义标识符。用法: -
匿名函数
利用 @(){} 语法可以在需要的地方使用匿名函数。下面展示了如何利用匿名函数创建一个自定义的 sort() 函数:例子:下面我们定义了 get(hash, key) 函数,返回 key 的值或 null。我们遍历 hash 中的每个键值对(pair),如果键(key)相匹配则返回对应的值。如下所示,语言内置的函数功能和 Stylus 表达式相结合,能够提供强大的灵活性: