Scotty项目中Lucid的p_调用字符串函数出现类型错误的解决办法
解决Scotty+Lucid中
p_ (reverse "hello world")的类型错误问题 这个问题我之前在做Scotty项目时也碰到过,核心原因其实是Lucid的p_函数对参数类型有特定要求——它期望接收的是实现了ToHtml类型类的Html相关值,而你直接把reverse返回的原生String传进去,就会触发类型不匹配的错误。下面给你两种简单直接的解决方法:
方法1:用txt函数包装字符串结果
txt是Lucid专门用来将普通字符串转换成HTML文本节点的工具函数,还会自动帮你处理HTML转义(这在处理用户输入时特别重要)。修改后的代码如下:
p_ $ txt $ reverse "hello world"
嫌嵌套麻烦的话,也可以用函数组合的写法:
p_ . txt $ reverse "hello world"
方法2:用toHtml函数(更通用)
因为String本身已经实现了ToHtml类型类,你可以用toHtml把字符串转换成Html类型,让p_能正常接收:
p_ $ toHtml $ reverse "hello world"
这种方法的优势是通用性更强——以后如果你要处理自定义数据类型(只要实现了ToHtml),也可以用同样的方式传入到Lucid的元素函数中。
为什么p_ "hello world"能正常运行?
这里其实是OverloadedStrings扩展在起作用:当你直接传入字符串字面量时,这个扩展会自动把String转换成Lucid需要的Html类型;但像reverse "hello world"这种函数调用的结果,不会自动触发这个转换,所以必须手动用txt或toHtml包装一下。
内容的提问来源于stack exchange,提问作者McBear Holden
相关产品推荐
相关产品推荐

