-Xlint
cảnh báo nếu nó thấy một var trong phạm vi:
$ scala -Xlint
Welcome to Scala 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_101).
Type in expressions for evaluation. Or try :help.
scala> { val x = "hi" ; s"$x" }
res0: String = hi
scala> { val x = "hi" ; "$x" }
<console>:12: warning: possible missing interpolator: detected interpolated identifier `$x`
{ val x = "hi" ; "$x" }
^
res1: String = $x
scala> { val y = "hi" ; "$x" } // no warning if x is not a symbol
res2: String = $x
scala> object Foo { case class Bar() { override def productPrefix = "Foo$Bar" } }
<console>:11: warning: possible missing interpolator: detected interpolated identifier `$Bar`
object Foo { case class Bar() { override def productPrefix = "Foo$Bar" } }
^
defined object Foo
Thông thường, sử dụng đồng USD tăng gấp đôi đối với đô la đen khi nội suy. (Edit: để được rõ ràng, $$
là như \$
.)
scala> object Foo { case class Bar() { override def productPrefix = s"Foo$$Bar" } }
defined object Foo
scala> Foo.Bar().productPrefix
res8: String = Foo$Bar
Sử dụng e-xen vào để có được một chuỗi liên tục.
scala> def productPrefix = f"Foo$$Bar"
productPrefix: String
scala> :javap -pv -
[snip]
public java.lang.String productPrefix();
descriptor:()Ljava/lang/String;
flags: ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
0: ldc #16 // String Foo$Bar
2: areturn
Bạn cũng có thể đặt hằng sôi nổi của bạn trong một phạm vi cách ly:
scala> :pa -raw
// Entering paste mode (ctrl-D to finish)
package k {
trait K { final val p = "Foo$Bar" }
}
package q {
case class Bar() { override def productPrefix = (null: k.K).p }
}
// Exiting paste mode, now interpreting.
scala> q.Bar().productPrefix
res1: String = Foo$Bar
Hằng được inlined. Bí quyết của tham chiếu null tránh bất kỳ phân bổ nào, bao gồm bất kỳ đối tượng singleton nào.
Nguồn
2016-09-08 23:48:57
'-Xlint: -missing-interpolator, _' –
@ som-snytt Ah! Phải, tôi không có '-Xlint' được kích hoạt cho dự án khác của tôi (có đầy đủ các chuỗi này), vì vậy tôi đã ngạc nhiên khi thấy cảnh báo lần đầu tiên. Trong dự án mới này, tôi đã bật '-Xlint'. –