以下代码使用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无法正常工作?代码有什么问题吗?
答案 0 :(得分:5)
感谢错误报告,伙计们。我会调查一下,然后按照我的发现跟进。
答案 1 :(得分:4)
看起来像text
库中的错误。
(我已经在错误跟踪器中添加了issue,以防作者没有访问Stack Overflow。)
答案 2 :(得分:3)
这是搜索代码中的一个错误:在模式的块边界上,在创建跳过表时省略了一个字符(井,代码单元),因此在某些输入上,搜索窗口移动得太远。 我已经给布莱恩发送了拉动请求。
由于您的模式由短文字组成,如果您使用优化进行编译,则不会找到错误。很好找。