0

我有一个应用程序,用户通过填充一堆文本框来设置一堆对象,这些文本框代表这些对象将采用的值。就像设置一个Person需要您输入 aName和 aLastName属性的对象一样。

现在我想介绍全局变量,用户可以为其赋值,或者在程序执行期间哪些值会发生变化。我希望用户能够在填充任何对象的属性时使用它们。我的第一个想法是选择一个特殊字符来标记变量名的开头,然后让用户使用该字符本身两次来表示该字符本身。

例如,假设我有一个名为McThing. 然后,假设我选择标记变量开头的符号是%。然后,用户可以输入字符串“Mc. %McThing”作为人的姓氏,然后我将使用McThing. 如果McThing的值为“Donalds”,则姓氏将变为“Mc. Donalds”。

这样做的问题是,如果我有一个变量被调用He,另一个被调用Hello并且用户输入“%Hello”作为字符串,我不知道需要替换哪个变量。例如,我可以将规则更改为使用“%”符号来标记变量名的开头和结尾。但我不确定这是否会导致任何其他问题。

实现这一点的最简单的规则集是什么,以便用户能够毫无歧义地表示每个可能的字符串?理想情况下,变量名称可以包含任何字符,但我可以将它们的名称限制为给定的一组字符。

4

2 回答 2

0

根据以下假设,这将很好且易于实施:

  • 您没有空变量名(即,如果我们看到 a%%是 a%还是空变量名?)
  • 变量名不能包含%s(即,如果我们%在变量名中看到 a,那是结尾还是%?)
    或者
    变量名不能以开头或结尾,% 并且您不能连续有 2 个变量名
    (即%a%%b%=aba%b?)

这些假设将确保 any%%总是代表一个%字符,而 any%总是代表字符串的开头或结尾。

这些假设可能不一定是必需的,但至少它们会使实现变得更加困难(根据上述假设,我们永远不必向前看超过 1 个字符)。

没有此类限制的替代方案,松散地基于 C/Java/etc 的方式。可以:

承担%了类似于\C/Java/etc 中的角色。- 利用:

  • %s表示字符串的开始
  • %e表示字符串的结尾
  • %%表示%字符

您也可以使用相同的字符来表示开始和结束,但是,我们也可以将它们设置为不同的,以便于阅读。

于 2013-06-24T21:31:27.430 回答
0

您标记开头和结尾的方法%有一个问题。如果输入字符串是 会发生什么%foo%%bar%?我得到 的值foo和 的值bar吗?还是我得到的价值foo%bar?(当然,如果%不允许使用变量名,这不是问题。)

为了避免这个问题,我能想到的最简单的方法是使用一个符号作为开头,使用另一个符号(例如#)作为结尾。这应该避免任何歧义。如果用户想要一个#in 文本或一个变量名,他会像这样转义它:%#. 这不会导致任何问题,因为空变量名不是问题(至少我希望不是)。

于 2013-06-22T23:40:03.887 回答