gpt4 book ai didi

java - 摆脱丑陋的 Actor 阵容

转载 作者:行者123 更新时间:2023-12-02 05:56:38 27 4
gpt4 key购买 nike

Add.java

public class Add implements Value, Reducible{
Value left;
Value right;
public Add(Value left, Value right){
this.left = left;
this.right = right;
}

@Override
public String toString(){
return (left + " + " + right);
}

@Override
public Value reduce(Machine environment) {
Value val = new Add(left, right);
if(left instanceof Reducible){
((Add)val).left = ((Reducible) ((Add)val).left).reduce(environment);
}
else if(right instanceof Reducible){
((Add)val).right = ((Reducible) ((Add)val).right).reduce(environment);
}else{
val = new VNumber(((VNumber)((Add)val).left).getValue() + ((VNumber)((Add)val).right).getValue());
}
return val;
}

}

Value.java

public interface Value {
public abstract String toString();
}

Reducible.java

public interface Reducible {
public abstract Value reduce(Machine environment);
}

Add.reduce 真的很难看。这是符合规定的完美代码,但几乎不可读。有没有办法摆脱那些丑陋的 Actor ?

最佳答案

你真是让自己的生活变得艰难了。首先,您已经有了“左”和“右”:您不需要不断地将它们从“val”中取出。其次,当您在三种情况之一中不打算使用新的 Add() 且还没有正确的参数时,不应该预先创建它。

尝试这样:

public Value reduce(Machine environment) {
if(left instanceof Reducible){
return new Add(((Reducible)left).reduce(environment), right);
}
if(right instanceof Reducible){
return new Add(left, ((Reducible)right).reduce(environment));
}
return new VNumber(((VNumber)left).getValue() + ((VNumber)right).getValue());
}

E&OE。但我会非常努力地在这里使用泛型。当然有一个缺失的情况,即“左”和“右”都是可约的?

关于java - 摆脱丑陋的 Actor 阵容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23036265/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com