我有两个变量和一个列表,我从以下列表中找到要分配给变量的项目:
var_A = tl_1;
var_B = findFirst(ground.getTargetLines(), n->n.getName().equals("tl_1"));
如果我为var_B执行的查找包含与var_A相同的结果,则为空。如果var_A为空或包含其他值,则可以将var_B分配给查找结果。
我想念什么?
答案 0 :(得分:0)
这里的问题是AnyLogic类型的getName()
函数的行为。
我尝试了TargetLine类型(从getName()
继承com.anylogic.engine.markup.AbstractMarkup
),也尝试了RectangularShape(从getName()
继承com.anylogic.engine.presentation.Shape
),它们的行为都相同。
AnyLogic文档对getName()
中的Shape
进行了如下解释:
getName():如果形状在可显示的对象类(代理或实验)中声明为字段,例如如果是在图形编辑器中绘制的,则返回字段名称,否则返回字符串UNKNOWN_NAME。
TargetLine
的{{1}}的解释与此类似。
将getName()
或TargetLine
的实例或其他AnyLogic特定类的实例分配给AnyLogic(!)变量(意味着在画布上以图形方式定义的变量)时,结果为RectangularShape
将从在实例属性中在图形编辑器中定义的名称更改为为其分配的变量的名称。从现在起,您可以不再检索原始定义的名称,因为它已在内部更改为变量的名称。但是,实例仍然是相同的,只是getName()
函数的返回值已更改。
getName()
这说明了为什么在将要搜索的列表成员的名称分配给AnyLogic变量后,为什么您的lambda表达式(以及使用traceln(rectangle.getName()); //prints "rectangle"
myRectangle = rectangle; //assign to AnyLogic Variable
traceln(rectangle.getName()); //prints "myRectangle"
函数的简单循环)无法按预期工作的原因。 / p>
总而言之,AnyLogic文档应该具有的状态如下:
getName():如果形状在可显示的对象类(代理或实验)中声明为字段,例如如果是在图形编辑器中绘制的,则返回该字段的名称,否则返回字符串UNKNOWN_NAME。如果将形状分配给AnyLogic变量(在图形编辑器中绘制的变量),则返回此变量的名称。例如。运行代码
getName()
后,myVar = myShape;
将返回 myVar 而不是 myShape 。