Programming languages 是否有允许重新定义数字的编程语言?
我第一次尝试这个问题是在CProgramming 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范围内的所有值,并且确实存在一种机制来调整缓存中的数值 有关更多详细信息,请参阅。以下是完整
#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);
}
}