代码之家  ›  专栏  ›  技术社区  ›  aioobe

执行以\结尾的方法!在Scala中有特殊的意义吗?

  •  10
  • aioobe  · 技术社区  · 14 年前

    方法是否以结尾 _! 例如 delete_! i_is_! 有什么特别的意义?只是名字吗?他们遵守一些惯例吗?甚至还有 bulkDelete_!! . (具体的上下文是Lift(如果它有区别的话)

    3 回复  |  直到 14 年前
        1
  •  17
  •   Rex Kerr    14 年前

    我不知道这个惯例是怎么用的 _! _!! 在电梯里,但这里有一点背景。

    scala> class Example_!@%*!
    defined class Example_$bang$at$percent$times$bang
    

    (事实上,如果用反记号将几乎所有内容括起来,就可以将其解析为标识符——例如,如果Java类使用Scala保留字,就可以这样做。或者如果您想在标识符中使用空格。)

    使用 它作为一个设定者是由你决定的;它将具有setter的语义

    scala> class Q { def q = "Hi"; def q_=(s: String) { println(s.reverse) } }
    defined class Q
    
    scala> val q = new Q
    q: Q = Q@b5c12e
    
    scala> q.q
    res0: java.lang.String = Hi
    
    scala> q.q = "Could use this to set something"
    gnihtemos tes ot siht esu dluoC
    

    任何 结束于 : . 这在列表中最常见: newElement :: existingList existingList.::(newElement) . 例如:

    scala> object Caps { def to_:(s: String) = s.toUpperCase }
    defined module Caps
    
    scala> "Example" to_: Caps
    res40: java.lang.String = EXAMPLE
    

    _ +符号是惯例。

        2
  •  8
  •   Dave Griffith    14 年前

    没有什么特别的意义!用Scala的名字。在Lisp语言家族中!通常用于表示函数有副作用,这看起来是这里的惯例。

        3
  •  6
  •   psp    14 年前

    奇怪的是,到目前为止还没有提到(虽然与你的问题不是特别相关)是一元数!特别处理。

    scala> class A { def unary_! = 5 }
    defined class A
    
    scala> !(new A)
    res0: Int = 5