Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
groovy运行时类型处理是如何工作的?_Groovy_Runtime - Fatal编程技术网

groovy运行时类型处理是如何工作的?

groovy运行时类型处理是如何工作的?,groovy,runtime,Groovy,Runtime,我最近发现groovy使用NumberMath实现进行数学计算 因此: 用于设置精度和比例。我刚从网上了解到这件事。但我仍然对它的工作原理感到困惑 那么,这通常是如何工作的呢?还有关于运行时类型处理之类的文档吗?代码bigdecimalx=1.0/30.0是由Groovy编译器编译的,当然可以很容易地发出代码,调用到运行时。如果我们忽略了callsite缓存和所有调用逻辑,那么会调用NumberMath#getMath。此方法决定使用操作数类型以及将使用的数学实现。有关该操作的信息随后将作为调用

我最近发现groovy使用NumberMath实现进行数学计算

因此:

用于设置精度和比例。我刚从网上了解到这件事。但我仍然对它的工作原理感到困惑


那么,这通常是如何工作的呢?还有关于运行时类型处理之类的文档吗?

代码
bigdecimalx=1.0/30.0
是由Groovy编译器编译的,当然可以很容易地发出代码,调用到运行时。如果我们忽略了callsite缓存和所有调用逻辑,那么会调用NumberMath#getMath。此方法决定使用操作数类型以及将使用的数学实现。有关该操作的信息随后将作为调用站点的方法调用名出现。由于Groovy中的1.0和30.0都是BigDecimal(后缀D或D使其成为双精度),因此最终将使用BigDecimalMath#divideImpl。然后,该方法调用BigDecimal#divide。由于给定的表达式需要无限长的BigDecimal,因此设置了小数位数和精度,即操作数和10的最大值以及默认舍入模式。至于是谁选择的类型。。。这是在基于实际对象的调用站点实现类中完成的,使用getClass(),有时使用静态信息,如果运行时和静态类型被认为是一些(提示:final类)。

不确定您的意思是什么?@tim_yates我的意思是,它们是如何考虑的?它们是在运行时添加的吗?对不起……是在运行时添加的吗?@tim_yates对不起,我假设元类在运行时被修改。数字逻辑是如何产生的?谢谢你的回答,这非常有帮助。你能给我指一些关于这方面的文档吗?这样我就可以深入研究了?
BigDecimal x = 1.0/30.0