【问题标题】:Distinguishing when a variable with a string is read区分何时读取带有字符串的变量
【发布时间】:2016-07-09 01:44:58
【问题描述】:
branch1:
    text:
        body: "You see two people talking #{branch1.text.person1} #{branch1.text.person2.1} #{branch1.text.person2.2} "
        person1: "Who are you?"
        person2:
            1: "my name is Terra."
            2: "What is your name?"

我正在使用 raw coffeescipt 构建一个选择你自己的冒险游戏。我将不同的故事路径组织成对象,然后将这些对象进一步划分为文本对象。我设置了一个 for 循环,它读取我设置的 text.body 属性,当用户单击鼠标时,它会遍历每个字符并将其写入 HTML 文档。

问题是,我需要正确地赋予对话属性,并且只显示该特定角色的对话。就目前而言,您在上面看到的内容将打印为:

"You see two people talking. Who are you? My name is Terra. What is your name?"

当它需要这样读取时:

"You see two people talking."

Person1: "Who are you?"
Person2: "My name is Terra."
Person2: "What is your name?" 

我想通过在我的循环中设置一些逻辑来做到这一点,这些逻辑可以以某种方式知道它何时读取包含循环的变量。换句话说,当我的循环到达: #{branch1.text.person1} 部分,计算机会理解“哦!这是一个带有字符串的变量,我最好区别对待”。

但问题是要找到一种方法让计算机区分像这样的字符串中的变量。有什么想法吗?

P.S.:最终的结果是创建一些看起来像这样的东西

【问题讨论】:

    标签: javascript string coffeescript adventure


    【解决方案1】:

    问题在于,当您使用 CoffeeScript 的字符串插值(带有那些 #{} 块)时,它们会被编译为 + 语句并在运行时作为 JavaScript 字符串进行评估,因此您将无法知道表达式是什么构造的值看起来像。

    如果您希望能够在运行时检测到这些模式,您将需要一种新的数据表示形式来封装它是一个表达式。例如,您可以选择使用常规字符串或函数来表示。这完全取决于您的代码需要做什么。

    【讨论】:

    • 是的,这很好。但是我将如何去检测它们呢?这才是真正的问题。我认为在普通的 javascript 中它看起来就像“你看到两个人在说话”。 + branch1.text.person1 + branch1.text.person2.1 + branch1.text.person2.2 问题仍然存在,当我的循环到达 branch1.text.person1 时,如何让计算机将其识别为变量一个字符串?
    • 你可以写"You see two people talking {branch1.text.person1} {branch1.text.person2.1} {branch1.text.person2.2}"之类的东西,然后在字符串中寻找那些模式。或者,也许您不是字符串并且可以使用函数:() => "...talking #{branch1.text.person1}"。这样,在您运行函数之前不会评估字符串,并且您可以在运行时检查它是否是函数而不是字符串。
    猜你喜欢
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多