modelx v0.10.0 (2020年9月17日)#
本次发布引入了以下改进和变更。
功能增强#
引用模式介绍
引用现在具有引用模式属性,用于控制当它们的派生引用值是核心modelx对象(如空间或单元格)时,如何确定这些值。 引用模式属性可以设置为"absolute"(绝对)、"relative"(相对)或"auto"(自动)。以下方法通过明确指定引用模式来设置引用。
UserSpace.absref()用于设置绝对引用UserSpace.relref()用于设置相对引用UserSpace.set_ref()用于在指定的引用模式下设置引用
当引用处于绝对模式时,其派生的引用会绑定到与基础引用相同的对象。
当引用处于相对模式时,其派生引用会绑定到一个对象,该对象与派生引用的相对位置,与基础引用所引用的对象相对于基础引用的相对位置保持一致。若不存在这样的值,则会引发错误。
当引用处于自动模式时,其派生的引用会尽可能采用相对绑定方式,在无法实现时则采用绝对绑定。
示例说明
在下图中,A 是一个用户空间,
B 是 A 的子用户空间,而 foo 是 B 的子单元格。
以下代码将bar定义为B中对foo的绝对引用:
>>> B.absref(bar=B.foo)
当从B派生出一个新的用户空间D时,D中的派生引用bar会绑定到B中的foo:
>>> D.bar
<Cells foo(x) in Model1.B>
或者,bar在B中可以定义为如下所示的相对引用:
>>> B.relref(bar=B.foo)
在这种情况下,D中的派生引用bar绑定到了D中的foo:
>>> D.bar
<Cells foo(x) in Model1.D>
或者,bar 在 B 中可以通过赋值操作定义为 自动 引用:
>>> B.bar = B.foo
由于支持相对引用,D.bar被绑定到D.foo:
>>> D.bar
<Cells foo(x) in Model1.D>
在下一个示例中,B.bar只能在绝对模式或自动模式下绑定到A。尝试在相对模式下将B.bar绑定到A会引发错误,因为A不在源自B的树结构中,且不存在与D.bar对应的对象:
>>> B.absref(bar=B.foo) # in absolute mode, or
>>> B.bar = B.foo # in auto mode
在任一模式下,D.bar 都绑定到 A:
>>> D.bar
<UserSpace A in Model1>
向后不兼容的变更#
在此版本之前,所有引用都处于绝对模式。
现在,引用赋值操作以自动模式分配modelx对象,当存在相对引用可能时,这可能导致某些引用被绑定到非预期的对象。这些引用现在需要通过UserSpace.absref()或UserSpace.set_ref()显式设置为绝对引用。
Bug修复#
修复了一个bug:当未被修改时,由
ExcelRange引用的Excel文件未被保存。