假设 - 支持非字符串文本中的非ASCII字符

时间:2013-03-28 05:42:34

标签: java compiler-construction programming-languages ascii portability

例如,在Java版本9中,有人想要添加对≤和≥字符的支持作为操作数,这分别与< =和> =操作数完全相同。这是否可行,因为≤和≥是非ASCII字符/不是标准字符集的一部分,而不会破坏可移植性?它可行吗?是否有任何主要的编程语言支持这样的东西?

2 个答案:

答案 0 :(得分:2)

Java不允许运算符重载,因为这是该语言的一个非常基本的原则,我认为你不能使用≤或≥对于< =或> =。

但是,Scala(另一种JVM语言)支持使用Unicode字符作为标识符的运算符重载。这是一个示例REPL会话,我为数字类型定义运算符:

scala> implicit class ExtendedNumeric[T](n: T)(implicit numeric: Numeric[T]) {
     | import numeric._
     | def `≥`(other: T) = n >= other
     | def `≤`(other: T) = n <= other
     | }
defined class ExtendedNumeric

scala> 1 ≤ 2
res0: Boolean = true

scala> 5 ≤ -5
res1: Boolean = false

scala> 8.0 ≥ 0.0001
res2: Boolean = true

答案 1 :(得分:1)

Java已经支持非ascii字符。例如,以下程序编译得很好:

public class Test {

    public static final float π = 3.1415927f; 

    public static void main(String[] args) {
        System.out.println(π);
    }

}

(当然,您需要使用包含π的源文件字符编码)

但是,由于≤和≥可能不会在标识符中使用,因此将它们作为运算符引入不会破坏向后兼容性。

许多语言都支持定义您自己的运算符。毕竟,区分运算符和函数调用的唯一因素是中缀表示法,即运算符名称出现在其操作数之间而不是之前。有关此类语言的(不完整)列表,请参阅operator overloading上的维基百科文章。