【问题标题】:Does DM-script have lazy evaluation?DM-script 有惰性求值吗?
【发布时间】:2020-06-04 13:12:49
【问题描述】:

我想知道 dm-script 中是否没有惰性求值?


我有以下代码片段来检查TagGroup 是否有效。它抛出一个错误,告诉我TagGroup 未定义,因此TagGroupCountTags() 函数无法在此TagGroup 上执行。但这就是这个片段的目的,检查TagGroupindex 是否有效。

我尝试调试代码。第一条语句tg.TagGroupIsValid() 返回false,0 <= index 当然也是。为什么tg.TagGroupCountTags() 仍在执行?我不能相信没有懒惰的评价。

number index = -1; // of course this is not set to -1 in my original code, this is just for demonstration
TagGroup tg;

clearResults();
result(tg.TagGroupIsValid() + "\n"); // resturns 0
result((0 <= index) + "\n"); // returns 0

if(tg.TagGroupIsValid() && 0 <= index && index < tg.TagGroupCountTags()){
    result("Valid.");
}
else{
    result("Invalid.");
}

【问题讨论】:

    标签: lazy-evaluation dm-script


    【解决方案1】:

    是的,DM-Script 中的条件总是被完全评估(没有惰性评估),所以你必须以嵌套的方式放置 If 子句。如果您使用的是三级运算符 (?),这也是正确的。

    【讨论】:

    • 我没想到会这样。我仍然想知道为什么我没有早点发现这一点。但没关系...谢谢你的回答:)
    • @miile7 是的,这是 DM 脚本的麻烦之一。但是,只有在遇到需要在对其进行操作之前检查对象的有效性的脚本时才会注意到它。这已经是相当高级的脚本了。
    猜你喜欢
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 2010-10-30
    • 2010-09-20
    • 2014-01-04
    • 2011-07-14
    • 1970-01-01
    相关资源
    最近更新 更多