2

用于研究数据管理的基于浏览器的软件StudyTRAX ( http://wiki.studytrax.com ) 允许通过 JavaScript 进行自定义表格和表格变量管理。但是,必须使用 StudyTRAX“变量”(本质上是表单元素 [包括 HTML 属性] 及其相应参数的表示,以及一些数据类型等)引用#<varname>,而常规 JavaScript 变量将只是<varname>.

做这种事情是为了使解析更容易,还是只是为了区分两者,以便不那么倾向于技术的研究人员在弄清楚他们在做什么时不会遇到太多麻烦?鉴于 JavaScript 的性质,我认为 StudyTRAX 的“变量”只是常规的 JavaScript 对象,以使表单设计和定制更简单的方式定义,因此后者更有意义,但我错了吗?

另外,我知道还有其他编程语言确实需要特定的变量前缀(尽管我现在想不出一些);在语言设计中选择该选择的通常原因是什么?

4

3 回答 3

2

两部分答案,StudyTRAX 几乎可以肯定是在使用预处理器来做一些魔术。JavaScript 使这种相对性变得容易,但不像 Lisp 那样容易。您仍然需要解析代码。通过添加前缀,解析器可以忽略 JavaScript 的许多复杂语法并获得好的部分,而无需“完美”的编译器。实际上,很多模板系统都是这样做的。它是 Lisp 准引用的实现(参见 Greenspun 的第十条规则)。

至于一般的前缀,理解它们的最好方法是尝试为没有它们的语言编写解析器。对于像 Lisp 和 JavaScript 这样的非常动态和纯粹的语言,一切都是 List / 对象,这还不错。当你得到方法与对象不同的语言,或者函数不是一流的时,解析器开始不得不问自己“foo”指的是什么类型的东西?来自 Ruby 的一个恼人的例子:一个无前缀的标识符要么是一个局部变量,要么是一个隐含在self. 在 Rails 中有一些用method_missing. Person.find_first_by_rank工作正常,但是

Class Person < ActiveRecord::Base
  def promotion(name)
    p = find_first_by_rank
    [...]
  end
end

给出一个错误,因为find_first_by_rank它看起来可能是一个局部变量,而 Ruby 害怕调用method_missing可能只是拼写错误的局部变量的东西。

现在想象一下试图区分实例变量(前缀-@)、类变量(前缀-@@)、全局变量(前缀-$)、常量(首字母Capitol)、方法名和局部变量(无前缀小写)仅根据上下文。

于 2012-06-19T06:32:11.813 回答
0

(来自编译器和语言爱好者设计师)。

您的问题更具体到“StudyTRAX”软件。

在编程的早期,Basic 中的变量使用前缀作为 $(对于字符串,“a$”),以区别于数值。今天,一些编程语言(如 PHP)用“$”为变量添加前缀。COBNOL 使用以 A 到 I 开头的变量表示整数,然后使用后面的字母表示浮点数。

转换,然后执行一些代码,这是一项复杂的任务,这就是为什么许多程序员使用诸如在编程语言中添加前缀或后缀之类的快捷方式。

在许多学院或大学中,存在专门的课程/课程,用于将代码从编程语言转换为计算机可以执行的操作,例如“编译器”、“自动机”、“语言设计”,因为这不是一件容易的事。

于 2012-05-24T16:58:08.333 回答
0

Perl 需要不同的变量前缀,具体取决于数据的类型:

$scalar = 4.2;
@array = (1, 4, 9, 16);
%map = ("foo" => 42, "bar" => 17, "baz" => 137);

据我了解,这是为了让读者可以立即识别他们正在处理的对象类型。这与读者是否倾向于技术无关:如果您减少程序员的认知负担,他可以将他的脑力用于更重要的事情,而不是弄清楚复杂的句法细节。

Perl 的设计在这方面是否成功是另一个问题,但我相信这就是该功能背后的原因。

于 2012-05-24T23:41:44.863 回答