用于研究数据管理的基于浏览器的软件StudyTRAX(http://wiki.studytrax.com)允许通过JavaScript进行自定义表单和表单变量管理。但是,一个StudyTRAX&#34;变量&#34; (基本上,表单元素[包含HTML属性]及其相应参数的表示,其中一些数据类型为/ etc。)必须引用#<varname>
,而常规JavaScript变量只是{{} 1}}。
这样做是为了使解析变得更容易,还是只是为了区分这两者,以便那些技术上不那么倾向的研究人员在找出他们所做的事情时会遇到多少麻烦? 39;干嘛?鉴于JavaScript的本质,我认为StudyTRAX&#34;变量&#34;是这样定义的常规JavaScript对象,使表单设计和自定义更简单,因此后者会更有意义,但我错了吗?
另外,我知道还有其他一些编程语言需要特定的变量前缀(尽管我现在还不能想到一些其他的编程语言);在语言设计中这种选择的通常推理是什么?
答案 0 :(得分:2)
两部分答案,StudyTRAX几乎肯定会使用预处理器来做一些魔术。 JavaScript使这种相对性变得容易,但并不像Lisp那么简单。您仍然需要解析代码。通过前缀,解析器可以忽略JavaScript的许多复杂语法,并且无需“图片完美”编译器即可获得良好的部分。实际上,许多模板系统都是这样做的。它是Lisp的准引用(see Greenspun's Tenth Rule)的实现。
对于一般的前缀,理解它们的最佳方法是尝试为没有它们的语言编写解析器。对于像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),方法名称和局部变量(无前缀)小案例)仅基于上下文。
答案 1 :(得分:0)
(来自编译器和语言爱好设计师)。
您的问题更适用于“StudyTRAX”软件。
在编程的早期阶段,Basic中的变量使用前缀作为$(对于字符串,“a $”),与数值不同。今天,一些编程语言(如PHP)使用“$”前缀变量。 COBNOL使用以A到I开头的变量,对于整数,以及后来的浮点字母。
转换,然后执行一些代码,这是一项复杂的任务,这就是为什么许多程序员使用快捷方式,比如为编程语言添加前缀或后缀。
在许多大学或大学里,存在专门的课程/课程,用于将代码从编程语言转换为计算机所做的事情,如“编译器”,“自动机”,“语言设计”,因为它不是一件容易的事。
答案 2 :(得分:0)
Perl需要不同的变量前缀,具体取决于数据类型:
$scalar = 4.2;
@array = (1, 4, 9, 16);
%map = ("foo" => 42, "bar" => 17, "baz" => 137);
据我了解,读者可以立即确定他们正在处理的是什么类型的对象。这不是读者是否在技术上倾向于问题:如果你减少了程序员的认知负担,他可以利用他的脑力来做更重要的事情而不是弄清楚复杂的句法细节。
Perl的设计在这方面是否成功是另一个问题,但我相信这是该功能背后的原因。