![](/img/trans.png)
[英]Why is Data.Text.Lazy needed? Couldn't strict chunks of a lazy structure be made by a compiler optimizer?
[英]Why doesn't Data.Text.Lazy.replace and Data.Text.Lazy.append work?
在下面的代碼中,有三種不同的方式( str1
, str2
和str3
)使用Data.Text.Lazy.replace
替換字符串。 他們應該提供相同的輸出。
import Data.Text.Lazy as DTL
str1 :: String
str1 = DTL.unpack $ DTL.replace key value text
where key = DTL.pack "<<name>>"
value = DTL.pack "Joyce"
text = DTL.pack "Hello, <<name>>."
str2 :: String
str2 = DTL.unpack $ DTL.replace key value text
where key = DTL.pack "<<" `DTL.append` DTL.pack "name"
`DTL.append` DTL.pack ">>"
value = DTL.pack "Joyce"
text = DTL.pack "Hello, <<name>>."
str3 :: String
str3 = DTL.unpack $ DTL.replace key value text
where key = DTL.pack $ "<<" ++ "name" ++ ">>"
value = DTL.pack "Joyce"
text = DTL.pack "Hello, <<name>>."
main :: IO ()
main = do putStrLn str1
putStrLn str2
putStrLn str3
然而,運行該程序的結果是:
Hello, Joyce.
Hello, <<name>>.
Hello, Joyce.
為什么str2無法正常工作? 代碼有什么問題嗎?
伙計們,感謝錯誤報告。 我會調查一下,然后按照我的發現跟進。
看起來像text
庫中的錯誤給我。
(如果作者沒有訪問Stack Overflow,我已經向bug追蹤器添加了一個問題 。)
這是搜索代碼中的一個錯誤:在模式的塊邊界上,在創建跳過表時省略了一個字符(井,代碼單元),因此在某些輸入上,搜索窗口移動得太遠。 我已經給Bryan發送了拉動請求。
由於您的模式由短文字組成,如果您使用優化編譯,則不會找到錯誤。 很好找。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.