Stylus 哈希

  • 定义和使用

    Stylus 在 0.39.0 版本中增加了对哈希对象的支持。
    可以使用大括号来定义哈希对象并用冒号来区分键和值:
    foo = {
      bar: baz,
      baz: raz
    }
    
    键应该是恰当的标识或字符串:
    foo = {
       bar: baz,
      'baz': raz,
      '0': raz
    }
    
    当你已经有一个哈希对象时,你可以使用方括号和字符串来为其赋值:
    foo = {}
    foo['bar'] = baz
    foo['baz'] = raz
    
    请注意,虽然不能在花括号定义中使用变量或插值,但可以在方括号内使用变量:
    foo = {}
    bar = 'baz'
    foo[bar] = raz
    
    foo.baz
    // => raz
    
  • 取值

    利用点操作符加标识符的方式可以从哈希对象中获取值:
    一个很简单的例子:创建一个两数相加的函数。
    foo = { bar: "baz" }
    foo.bar
    // => "baz"
    
    或者使用方括号和字符串的方式:
    foo = { "%": 10 }
    baz = "%"
    
    foo[baz]
    // => 10
    
    你可以使用任何组合方式:
    foo = {
      bar: {
        baz: {
          raz: 10px
        }
      }
    }
    
    qux = "raz"
    foo["bar"].baz[qux]
    // => 10px
    
  • 插值

    在插值中使用哈希对象的话将以 CSS 的形式输出哈希对象的内容(虽然算不上是 Stylus 的任何功能):
    一个很简单的例子:创建一个两数相加的函数。
    foo = {
      width: 10px,
      height: 20px,
      '&:hover': {
        padding: 0
    
      }
    }
    
    .bar
      {foo}
    
    // => .bar {
    //      width: 10px;
    //      height: 20px;
    //    }
    //    .bar:hover {
    //      padding: 0;
    //    }
    
  • 其他操作

    您可以将 Stylus 中的其他普通操作应用到哈希对象上,例如 length():
    一个很简单的例子:创建一个两数相加的函数。
    foo = { bar: 'a', baz: 'b' }
    length(foo)
    // => 2
    
    你可以遍历哈希对象,key 参数是可选的:
    foo = { width: 10px, height: 20px }
    
    for key, value in foo
      {key}: value
    
    // => width: 10px;
    //    height: 20px;
    
    可以使用 in 来检查哈希对象中是否存在某个键:
    foo = { bar: 10px}
    
    bar in foo
    // => true
    
    baz in foo
    // => false
    
    可以使用相应的内置函数来获取哈希对象的所有键或所有值:
    foo = { bar: 10px}
    
    bar in foo
    // => true
    
    baz in foo
    // => falsefoo = { bar: 'a', baz: 'b' }
    
    keys(foo)
    // => 'bar' 'baz'
    
    values(foo)
    // => 'a' 'b'
    
    你可以使用内置函数 remove 从哈希对象中删除一个键:
    obj = { foo: 1, bar: 2 }
    remove(obj, 'foo')
    // => {"bar":"(2)"}
    
    你还可以使用 merge (别名为 extend)函数来合并哈希对象:
    obj = {
      foo: 'foo'
      bar: 'bar'
    }
    
    obj2 = {
      baz: 'baz'
    }
    
    merge(obj, obj2)
    // => {"foo":"('foo')","bar":"('bar')","baz":"('baz')"}