2011-10-27 40 views
15

Tôi muốn hỏi nếu có bất kỳ loại nội suy chuỗi nào trong Scala. Tôi đã thực hiện một tìm kiếm về chủ đề này nhưng 'cho đến bây giờ tôi đã tìm thấy rằng không có nội suy chuỗi. Có kế hoạch để được triển khai trong các phiên bản tiếp theo không?Nội suy chuỗi trong Scala?

Cảm ơn!

CẬP NHẬT

Chuỗi suy sẽ là trong scala 2.10 mà bạn có thể thử từ scala 2.10.RC1 là ra (20/10/2012). Bạn có thể kiểm tra điều này SIP cho scala 2.11 trong đó nói rằng các chuỗi nội suy trong trình ghép mẫu sẽ là cú pháp hợp lệ. Với sự suy chuỗi mới bạn có thể làm một cái gì đó như thế này:

val age = 28 
val name = "Gerry" 

s"My name is $name and I am $age years old" 
res0: String = My name is Gerry and I am 28 years old 

Nhưng thử documentation trên tất cả các interpolators mà có sẵn tại thời điểm này. Lưu ý rằng bạn có thể xác định nội suy của riêng bạn! Hãy thử this link để biết thêm thông tin.

+0

http://docs.scala-lang.org/sips/index.html – Debilski

+2

Để hoàn chỉnh, lập luận vì không có những là ' "(" + giá trị + ")"' chỉ là một nhân vật còn hơn '" (# {value}) "' –

+1

có thể trùng lặp của [Tại sao không có nội suy chuỗi trong Scala?] (http: // stackoverflow.com/questions/2481459/why-is-there-no-string-interpolation-in-scala) –

Trả lời

22

Nó chưa có trong thư viện scala (đã được phát hành). Nhưng có một SIP (Scala Cải thiện Process) cho việc bổ sung các tính năng này:

http://docs.scala-lang.org/sips/pending/string-interpolation.html

+3

Nó cũng đã có trong thân cây (như tính năng thử nghiệm): https://lampsvn.epfl.ch/trac/scala/changeset/ 25812/ – tenshi

+0

@tenshi cảm ơn! Tôi sẽ kiểm tra xem thân cây có cái này không, nếu tôi có thời gian. –

14

Bạn có thể làm điều đó C-style:

"Interpolate my %s here" format List(1,2,3) 

//String = Interpolate my List(1, 2, 3) here 

hoặc

List(1,2,3) formatted "Interpolate my %s here" 

Bạn có thể sử dụng những thứ này với bất kỳ thứ gì có toString (ví dụ: mọi thứ)

case class Foo(n: Int) 
Foo(42) formatted "Here is a %s !!!!" 
//String = Here is a Foo(42) !!!! 

mặc dù trước đây linh hoạt hơn về việc cho phép nhiều nội suy trong một chuỗi đơn (vì nó có thể lấy nhiều đối số).

7

tôi sử dụng xml hack vào scala 2,9

val age = 28 
val name = "Gerry" 

<a>My name is {name} and I am {age} years old</a>.text 
res0: String = My name is Gerry and I am 28 years old 
+2

Đây có thể là cũ, nhưng đó là một hack tốt đẹp! – javadba

0

này ngày (Tháng 12 năm 2016, Scala 2.12, năm năm sau), bạn có thể viết nội suy chuỗi của riêng bạn.
Xem co.ntextu.al

theo ngữ cảnh là một thư viện Scala nhỏ cho phép bạn xác định xâu chuỗi interpolators-tiền tố của riêng bạn như uri"https://google.com" mà xác định làm thế nào họ cần được đánh giá, trong thời gian chạy và tại thời gian biên dịch, trong khi chỉ viết mã người dùng rất bình thường: không có macro!

Ví dụ: contextual/examples/email.scala cho phép check at compile time the validity of an email address.

import contextual.examples.email._ 
email"""[email protected]""" 

import contextual.examples.email._ 
email"""[email protected]""" 
Các vấn đề liên quan