language-design - 语言所需变量名前缀的推理

标签 language-design

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

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

此外,我知道还有其他编程语言确实需要特定的变量前缀(尽管我目前无法想到一些);在语言设计中做出这种选择的通常理由是什么?

最佳答案

答案由两部分组成,StudyTRAX 几乎可以肯定是使用预处理器来实现一些魔法。 JavaScript 使这种相对论变得容易,但不像 Lisp 那样容易。您仍然需要解析代码。通过前缀,解析器可以忽略 JavaScript 的许多复杂语法,并在不需要“完美”编译器的情况下获得好的部分。事实上,很多模板系统都这样做。它是 Lisp 准引用 ( see Greenspun's Tenth Rule ) 的实现。

对于一般的前缀,理解它们的最好方法是尝试为没有它们的语言编写解析器。对于像 Lisp 和 JavaScript 这样非常动态和纯粹的语言来说,一切都是列表/对象,这还不错。当您获得方法与对象不同或函数不是一流的语言时,解析器开始不得不问自己“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)、方法名称和局部变量(无前缀)小案例)仅根据上下文。

关于language-design - 语言所需变量名前缀的推理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10739986/

相关文章:

objective-c - 是否可以通过编程方式确定类具有哪些属性?

exception - 设计一种带有检查异常的语言

php - 是什么让 PHP 比 Java 或 C# 慢?

c++ - vector 复制值

asynchronous - 等待而不将函数声明为异步

java - Java 是否有任何计划添加隐式 Getters 和 Setters?

Scala 可变参数函数和 Seq

programming-languages - 在一个项目中使用多种语言

haskell - Haskell是否有内在的“垃圾成本”?

clojure - Clojure 中的匿名宏