是否有允许重新定义数字的编程语言?

时间:2016-06-15 14:53:53

标签: programming-languages flexibility

我对这个问题的第一次尝试是在C

#define 2 5
assert(2+2 == 10);

不幸的是

error: macro name must be an identifier

我也尝试过Scheme

(define 2 5)

can't define a non-symbol: (define 2 5)

我想知道是否有可能的编程语言。

1 个答案:

答案 0 :(得分:1)

我真诚地希望不会。

但是说,我知道Java中的一种方法:你可以使用 reflection 来调整缓存的盒装Integer的值:JVM必须缓存所有值范围-128到+127,并且确实存在调整该缓存中数值的机制!

有关详细信息,请参阅https://codegolf.stackexchange.com/questions/28786/write-a-program-that-makes-2-2-5/28818#28818。这里是完整的代码:

import java.lang.reflect.Field;
public class Main {
    public static void main(String[] args) throws Exception {
        Class cache = Integer.class.getDeclaredClasses()[0];
        Field c = cache.getDeclaredField("cache");
        c.setAccessible(true);
        Integer[] array = (Integer[]) c.get(cache);
        array[132] = array[133];

        System.out.printf("%d", 2 + 2);
    }
}

输出为5,主要通过重新定义数字4来实现。