在Java中模拟动态作用域?

在Java中模拟动态作用域?,java,dynamic,simulation,scoping,dynamic-scope,Java,Dynamic,Simulation,Scoping,Dynamic Scope,我在java中找到了这段关于动态范围的代码。但这让我很困惑 有人能告诉我这是不是你做动态范围界定的方式吗 static void f1() { callstack.push(new Hashtable()); declare("a", new Integer(1)); System.out.println(getvalue("a")); f2(); System.out.println(getvalu

我在java中找到了这段关于动态范围的代码。但这让我很困惑

有人能告诉我这是不是你做动态范围界定的方式吗

static void f1() {

        callstack.push(new Hashtable());


        declare("a", new Integer(1));

        System.out.println(getvalue("a"));

        f2();


        System.out.println(getvalue("a"));


        callstack.pop();

    }

那是疯狂的谈话。我可以建议您尝试Perl吗?

Java在“静态”和“动态”之间有一个严格的划分,并且没有提供混合这两种语言的语言结构

如果您想要一个“动态范围”的值,那么将其转换为在运行时计算的对象/方法

例如,中提供了这些示例(阅读以获得完整解释):

python
#Closures.py
def make_fun():
#在返回函数的范围之外:
n=0
def func_to_返回(arg):
非局部n
#如果没有“非本地”,n+=arg将生成:
#赋值前引用的局部变量“n”
打印(n,arg,end=“:”)
arg+=1
n+=arg
返回n
return func_to_return
x=使你变得有趣()
y=使你变得有趣()
对于范围(5)中的i:
印刷品(x(i))
打印(“=”*10)
对于范围(10,15)内的i:
印刷品(y(i))
“”“输出:
0 0: 1
1 1: 3
3 2: 6
6 3: 10
10 4: 15
==========
0 10: 11
11 11: 23
23 12: 36
36 13: 50
50 14: 65
"""
Java(“不允许动态范围”)
//AreLambdasClosures.java
导入java.util.function.*;
公共类兰姆达斯酒店{
公共功能使你变得有趣{
//在返回函数的范围之外:
int n=0;
返回arg->{
系统输出打印(n+“”+arg+:“”);
arg+=1;
//n+=arg;//生成错误消息
返回n+arg;
};
}
公开无效试用{
作用
x=使你变得有趣(),
y=使你变得有趣();
对于(int i=0;i<5;i++)
系统输出println(x.apply(i));
对于(int i=10;i<15;i++)
系统输出打印LN(y.apply(i));
}
公共静态void main(字符串[]args){
新的AreLambdasClosures()。试试它();
}
}
/*输出:
0 0: 1
0 1: 2
0 2: 3
0 3: 4
0 4: 5
0 10: 11
0 11: 12
0 12: 13
0 13: 14
0 14: 15
*/
Java(将值转换为运行时评估的对象,即“动态范围”)
//AreLambdasClosures2.java
导入java.util.function.*;
myInt类{
int i=0;
}
公共类是lambdasclosures2{
公共消费者品牌2(){
myInt n=新的myInt();
返回arg->n.i+=arg;
}
}

要么。。。像那样或另一堆。。。或者(很容易滥用)变量。我想模拟动态作用域,而不是使用内置支持动态作用域的语言。