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

Programming languages 是否有允许重新定义数字的编程语言?,programming-languages,flexibility,Programming Languages,Flexibility,我第一次尝试这个问题是在C #define 2 5 assert(2+2 == 10); 不幸的是 error: macro name must be an identifier 我也试过这个计划 (define 2 5) 但是 我想知道是否有任何编程语言可以做到这一点。我真诚地希望没有 但是也就是说,我知道Java中有一种方法:可以使用反射来调整缓存的盒装整数的值:JVM必须缓存-128到+127范围内的所有值,并且确实存在一种机制来调整缓存中的数值 有关更多详细信息,请参阅。以下是完整

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

#define 2 5
assert(2+2 == 10);
不幸的是

error: macro name must be an identifier
我也试过这个计划

(define 2 5)
但是

我想知道是否有任何编程语言可以做到这一点。

我真诚地希望没有

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

有关更多详细信息,请参阅。以下是完整的代码:

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号来实现的。

只是一个想法,但是在C++中,可能会重载<代码> +/Cux>运算符,然后重新定义在加法期间每个操作数的行为。@ TimiGeEeleSeEN:这是困难的,因为<代码> 2 +2 < /C> >是编译时可评估的常量表达式。在标准C++中,我看不出这样做的方法。为什么这么问?知道应该避免使用哪种语言吗?@TimBiegeleisen这是个好主意。不幸的是,我认为您不能为内置类型(如int)重载运算符。我试图定义一个类,重载
+/code>,
int
操作符,然后将数字文本转换到新类。它给出的代码看起来像
(T)2+(T)2==5
。这看起来很奇怪和可疑,但很酷,谢谢。)我对安装Java有点不满,但它成功了。这很酷,谢谢你的回答。对不起,我没有足够的虚拟堆栈溢出点来进行投票。
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);
    }
}