Scriban中为何无法获取函数返回字符串的正确长度?
问题原因分析
你遇到的这个问题,核心是没搞懂Scriban里func定义的模板函数和字符串值的本质区别:
- 当你用
{{ func getString }}text{{ end }}定义函数时,getString本质是一个模板渲染函数——它的作用是在调用时把text输出到渲染流里,而不是直接返回"text"这个字符串值。 - 当你直接写
{{ getString | string.size }}时,你其实是在对getString这个函数对象本身调用string.size,而不是对它执行后的输出结果调用。函数对象的字符串表示(比如在Scriban里可能是类似<Function>的标识)长度为0,所以你得到了不符合预期的结果。
解决方法
要拿到函数执行后输出的文本长度,你需要先捕获函数执行的输出内容,再对捕获到的字符串计算长度:
{{ func getString }}text{{ end }} {% capture rendered_text %}{{ getString }}{% endcapture %} {{ rendered_text | string.size }} <!-- 这里会输出4,符合你的预期 -->
简单来说,{% capture %}标签的作用就是把中间渲染的内容捕获到一个变量里,这样你就能对这个变量(也就是真正的"text"字符串)调用string.size了。
内容的提问来源于stack exchange,提问作者mr100
相关产品推荐
相关产品推荐

