2010-07-26 25 views

Trả lời

9

Kể từ unicode thoát qua \u0022 trong xâu nhiều đường sẽ không giúp bạn, bởi vì họ sẽ được đánh giá là ba dấu ngoặc kép rất giống nhau, cơ hội duy nhất của bạn là ghép lại như vậy:

"""Hi, """+"""""""""+"""everyone""" 

Điều tốt là trình biên dịch đủ thông minh để sửa lỗi này và do đó nó sẽ làm cho một chuỗi duy nhất ra khỏi nó khi biên dịch.

Ít nhất, đó là những gì scala -print nói.

object o { 
    val s = """Hi, """+"""""""""+"""everyone""" 
    val t = "Hi, \"\"\"everyone" 
} 

và sử dụng scala -print

Main$$anon$1$o.this.s = "Hi, """everyone"; 
Main$$anon$1$o.this.t = "Hi, """everyone"; 

Lưu ý tuy nhiên, bạn không thể nhập nó như vậy. Định dạng mà các kết quả đầu ra scala -print dường như chỉ sử dụng nội bộ.

Tuy nhiên, có thể có cách dễ dàng hơn, đơn giản hơn để thực hiện việc này.

2

bạn không thể

heredocs scala là chuỗi thô và không sử dụng bất kỳ mã thoát nếu bạn cần dấu ngoặc kép tripple trong một chuỗi sử dụng chuỗi nối thêm chúng

+0

Không có ký tự thoát nào? Anh ta không thể làm '/"/"/" '? – wheaties

+0

không, không phải trong chuỗi heredoc thêm \ hoặc/trước khi "thêm \" hoặc/"vào chuỗi nhưng bạn có thể thoát" trong chuỗi thông thường –

2

Bạn không thể sử dụng dấu ngoặc kép, theo như tôi biết. Trong thông số kỹ thuật, mục 1.3.5, nêu rõ:

Một chuỗi nhiều dòng là một chuỗi ký tự kèm theo dấu ngoặc kép "" "..." "". Trình tự các ký tự là tùy ý, ngoại trừ việc nó có thể chứa ba hoặc nhiều ký tự trích dẫn chỉ mang tính cuối cùng. Các ký tự phải không nhất thiết phải có thể in được; các dòng mới hoặc các ký tự điều khiển khác cũng được cho phép. Thoát Unicode hoạt động ở mọi nơi khác, nhưng không có chuỗi thoát nào trong số (§1.3.6) được diễn giải.

Vì vậy, nếu bạn muốn đầu ra ba dấu ngoặc kép trong một chuỗi, bạn vẫn có thể sử dụng chuỗi giá duy nhất với thoát:


scala> val s = "Hi, \"\"\"everyone" 
s: java.lang.String = Hi, """everyone 
+0

Bạn cũng có thể sử dụng trình tự thoát unicode. –

+0

Vì vậy, không có cách nào để làm điều này trong heredoc. Tôi không hiểu tại sao scala không ủng hộ nó. – Freewind

+0

@jhominal: vẫn không hoạt động nếu bạn unicode ba ký tự trích dẫn trong một chuỗi nhiều dòng. Nó sẽ vẫn được hiểu là sự kết thúc của chuỗi ký tự nhiều dòng –

5

Đó là một hack hoàn toàn mà tôi posted on a similar question, nhưng nó cũng hoạt động ở đây: sử dụng cấu trúc XML của Scala dưới dạng định dạng trung gian.

val str = <a>Hi,"""everyone</a> text 

Điều này sẽ cung cấp cho bạn chuỗi có ba dấu ngoặc kép.

+0

, điều này rất hữu ích, cảm ơn bạn – Freewind

+0

Điều chắc chắn. Tôi phải nói, tôi khá hài lòng với nó. ;-) – pr1001

Các vấn đề liên quan