【问题标题】:String interpolation in coffeescript咖啡脚本中的字符串插值
【发布时间】:2017-12-26 15:52:54
【问题描述】:

我的问题与here 发布的问题类似。本质上,我想阅读如下配置file.json

{
  "message": "Error in #{baseName} at #{directory}"
}

我想使用作为地图/对象提供的变量来插入消息字符串。与上面的问题不同,要格式化的字符串在编译时是未知的。

是否可以使用咖啡脚本中的内置方法运行字符串插值,或者我是否必须使用胡须或类似技术?

【问题讨论】:

    标签: coffeescript string-formatting


    【解决方案1】:

    根据@deceze 的评论 - 不。 coffeescript 将作为没有这种字符串插值语法的 JS 编译和执行。即使这样,您也必须使用eval(),这不是一个好的做法。

    我建议使用 JS 库 spintf 进行动态字符串插值。您可能熟悉其他语言的语法

    【讨论】:

    • 模板文字在运行时呈现。这是valid CoffeeScriptx = "#{Date.now()}"。 CS 字符串插值只是转换为 JS 字符串连接,因此可以使用任何返回字符串的有效 JS。另外,ES6 现在有template literals
    • @EzraChu,是的,但是包含模板文字的 file.json 不是由 Coffeescript 编译的 - 它是在运行时由从 CoffeeScript 源转译的 JS 评估的。 ES6 模板文字可能是一个选项,但正如您所提到的,Coffeescript 转换为连接,而不是 ES6 插值。也许有一种 Coffeescript 可以为你做到这一点。
    【解决方案2】:

    您可以使用 CoffeeScript 模板文字轻松连接一个非常基本的模板引擎。

    您必须将您的 JSON 定义为导出的 CS 文件:

    module.exports = (context)->
      [
        some: "#{context.dynamic.content}"
      ,
        some: 'other static content'
      ]
    

    然后,您只需使用所需的值调用该函数:

    render = require './data'
    myContext =
      dynamic: content: 'some dynamic content'
    
    dynamicData = render(myContext)
    

    此时dynamicData 看起来像这样:

    [
      some: 'some dynamic content'
    ,
      some: 'other static content'
    ]
    

    【讨论】:

      猜你喜欢
      • 2014-01-31
      • 1970-01-01
      • 2014-12-29
      • 1970-01-01
      • 2013-01-24
      • 2013-01-09
      • 1970-01-01
      • 1970-01-01
      • 2012-08-26
      相关资源
      最近更新 更多