【问题标题】:Is there any language where names can include space characters?是否有任何语言的名称可以包含空格字符?
【发布时间】:2010-11-16 15:36:15
【问题描述】:

是否有任何编程语言允许名称包含空格? (按名称,我指的是变量、方法、字段等)

【问题讨论】:

  • 只是好奇...为什么要它?
  • 如果您有兴趣在源代码中添加更多空格,请查看:en.wikipedia.org/wiki/Whitespace_%28programming_language%29
  • 我正要提到空白,但它看起来没有任何名称。 Prolog 是另一种允许像“this that”这样的带引号的字符串以与标识符相同的方式使用的方法,正如人们已经注意到的 Ruby、SQL 等。

标签: programming-languages compiler-theory


【解决方案1】:

Scala 确实允许在标识符名称中使用空格字符(但要做到这一点,您需要用一对反引号将标识符括起来)。

示例(在 Scala REPL 中执行):

Welcome to Scala version 2.8.0.final (Java HotSpot(TM) Client VM, Java 1.6.0_22).
Type in expressions to have them evaluated.
Type :help for more information.

scala> val `lol! this works! :-D` = 4
lol! this works! :-D: Int = 4

scala> val `omg!!!` = 4
omg!!!: Int = 4

scala> `omg!!!` + `lol! this works! :-D`
res0: Int = 8

【讨论】:

    【解决方案2】:

    在 SQL 中,您可以在字段名称等中包含空格和其他非标识符字符。您只需引用它们,例如 [field name]"field name"

    【讨论】:

    • 我只见过微软产品中的方括号约定。有没有其他人使用它,或者他们主要使用我经常看到的双引号?
    • 引号是ANSI标准SQL,但我相信括号是从Sybase继承的。这就是 SQL Server 使用它们而 Access 不使用它们的原因。
    【解决方案3】:

    Common Lisp 可以用变量来做到这一点,如果你用管道 (|) 将变量名括起来:

    CL-USER> (setf |hello world| 42)
    42
    CL-USER> |hello world|
    42
    

    值得注意的是,“管道”变量名也是区分大小写的(哪些变量名通常不在 CL 中)。

    CL-USER> |Hello World|
    The variable |Hello World| is unbound.
       [Condition of type UNBOUND-VARIABLE]
    CL-USER> (setf hello-world 99)
    99
    CL-USER> hello-world
    99
    CL-USER> HeLlO-WoRlD
    99
    

    【讨论】:

      【解决方案4】:

      PHP 可以:http://blog.riff.org/2008_05_11_spaces_php_variable_names

      还有 Perl:

      ${'一些变量'} = 42; 打印 ${'some var'}, "\n"; ${'我的方法'} = sub { print "方法调用\n"; }; &${'我的方法'};

      【讨论】:

        【解决方案5】:

        在 Ruby 中,您可以使用命名为 :"this has a space" 的符号,但它用双引号括起来,所以我不确定您是否计算在内。

        如果其他语言允许空格作为符号名称中的有效字符,那么您将不得不使用其他字符来分隔它们。

        【讨论】:

          【解决方案6】:

          一种较新的创新和实验性 Web 脚本(子)类型的 JavaScript:https://github.com/featurist/pogoscript/wiki

          wind speed = 25
          average temperature = 32
          

          变成

          windSpeed = 25
          averageTemperature = 32
          

          幕后。还有关于返回变量定位的灵活规则,因此您可以这样做:

          y = compute some value from (z) and return it
          md5 hash (read all text from file "sample.txt")
          

          变成:

          var y;
          y = computeSomeValueFromAndReturnIt(z);
          md5Hash(readAllTextFromFile("sample.txt"));
          

          【讨论】:

            【解决方案7】:

            变量名中的空格问题在于它需要解释,因为空格通常意味着“好的,当前标记的结尾,开始另一个标记”。此规则的例外情况必须有一些特殊指示符,例如字符串中的引号(“这是一个测试”)。

            【讨论】:

              【解决方案8】:

              我们的PARLANSE 并行编程语言就是这样一种。事实上,它允许标识符中的任何字符,尽管其中许多字符(包括空格)必须被转义(以 ~ 开头)才能包含在名称中。这是一个例子:

                       ~'Buffer~ Marker~'
              

              这用于让 PARLANSE 轻松引用来自其他语言的任意符号(特别是来自任意参考文档的 EBNF,我们无法控制所使用的标点符号)。

              我们不经常使用此功能,但在需要时,这意味着我们可以忠实于其他文档中的标记。

              【讨论】:

                【解决方案9】:

                您也许可以在此网站上找到不使用空格分隔表达式元素的深奥语言:http://99-bottles-of-beer.net

                例如...whitespace:D

                【讨论】:

                  【解决方案10】:

                  某些 SQL 方言允许数据库、表和字段的名称中包含空格。

                  例如,在 SQL Server 中,您可以通过将表名放入 [square brackets] 或(取决于连接选项)放入 "double quotes" 来引用名称中包含空格的表。

                  【讨论】:

                    【解决方案11】:

                    创建这种支持标识符中的空格的语言应该不会有太多问题,只要有足够的分隔标记来说明标识符结束的解析器(例如运算符、大括号、逗号和臭名昭著的分号)。只是对源代码的可读性没有太大的提高。

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2013-07-11
                      • 2012-03-07
                      • 1970-01-01
                      • 2020-09-09
                      • 2020-12-18
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多