2010-09-25 41 views
8

Trong Haskell, để đại diện cho chuỗi chữ "\", người ta sẽ thường viết:Haskell - Làm các dấu gạch chéo ngược luôn luôn phải được thoát trong một chuỗi?

"\\" 

Tuy nhiên, có một cách để thoát khỏi chuỗi như vậy mà một dấu chéo ngược duy nhất có thể được viết bởi chính nó mà không cần phải có trốn thoát? Ví dụ, tôi có thể thực hiện chính xác điều này trong C# bởi trước đang chờ giải quyết @ vào chuỗi:

@"\" 

Liệu Haskell có một tương đương?

+0

triple-trích dẫn một \ trong python không hoạt động như thế ... – geoffspear

Trả lời

5

Không, xem phần 2.6 của Haskell Lexical Structure.

Haskell không có chuỗi thô, heredocs hoặc chuỗi ba. Lấy làm tiếc. Chỉ có fanciness bạn nhận được là:

"ab\ 
    \cd" 

=> 

"abcd" 

Không gian trắng giữa dòng kết thúc và dấu gạch chéo-chéo được bỏ qua. Điều này rất hữu ích, ví dụ, nếu bạn muốn phát ra một số HTML nội tuyến được thụt lề đúng trong nguồn Haskell, nhưng không quá thụt vào trong đầu ra. (Không phải là tôi muốn chủ trương làm đầu ra HTML phức tạp theo cách này.)

+0

và tôi có thể nói, những dấu xồ nguợc khoảng trắng phớt lờ vẻ một chút bất mãn với tôi, những gì với haskell khá dễ dàng để liên tục gấp. – muhmuhten

+0

Tôi đã sử dụng tính năng này một lần, tôi không thể nhớ tại sao. Mặc dù nó không phát ra HTML. –

+0

lý tưởng, trình biên dịch sẽ có thể xác định "blah" ++ "blah" 'tại thời gian biên dịch trong mã thuần túy. trong thực tế, tôi không có ý tưởng. – muhmuhten

1

Có thể sử dụng Haskell tiêu chuẩn, nhờ vào cơ chế QuasiQuoting:

http://www.haskell.org/haskellwiki/Poor_man%27s_here_document#Quasiquoting

Bằng cách đó, không \\ vấn đề nữa. Vấn đề duy nhất là bây giờ bạn phải cẩn thận về |] để chấm dứt chuỗi quasiquoting và bạn có thể phải trốn thoát. Trong ngữ cảnh của các biểu thức chính quy, tôi đã tự thoát nó bằng \ u7c] hoặc một cái gì đó như thế, tôi không nhớ chính xác. Vì vậy, tôi đã sử dụng mã unicode hoặc ASCII cho ký tự ống. Nhưng trình tự này không xuất hiện thường xuyên.

Và nếu bạn quan tâm đến việc này để nhập biểu thức thông thường, tôi là một fan hâm mộ lớn của thư viện Rex:

http://hackage.haskell.org/package/rex

Mà không chỉ sử dụng những quasiquoting cho entry regex đẹp (không có dấu xồ nguợc đôi), nó cũng sử dụng các biểu thức thông thường giống như perl và không phải là các biểu thức chính quy POSIX gây phiền nhiễu mặc định, và thậm chí cho phép bạn sử dụng các biểu thức chính quy làm mẫu phù hợp với các tham số phương thức của bạn, đó là thiên tài.

1

Có một đẹp library (raw-strings-qq) mang đến cho bạn QuasiQouter

import Text.RawString.QQ 

multiline :: String 
multiline = [r|<HTML> 
<HEAD> 
<TITLE>Auto-generated html formated source</TITLE> 
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1252"> 
</HEAD> 
<BODY LINK="800080" BGCOLOR="#ffffff"> 
<P> </P> 
<PRE>|] 
Các vấn đề liên quan