2

我们将沙箱升级到 Winter '13,但我们的生产环境仍在旧版本上。以下代码在我们的沙箱上打印“false”,但在生产环境中打印“true”。我似乎在网上找不到提到这一点,但看起来它们的工作方式不同!

Set<Id> x = new Set<Id>{
     '012A0000000qv2wIAA'
    ,'012A0000000qv2xIAA'
    ,'012A0000000qv2yIAA'
    ,'012A0000000qv2zIAA'
};

System.debug(x.contains('012A0000000qv2z'));

请注意,Set 包含 18 个字符的 ID,我们询问它是否 .contains() 一个 15 个字符的 ID。我不介意它以一种或另一种方式工作。只是奇怪的是它的行为不同。


编辑:刚刚注意到,如果我将字符串显式转换为 ID,则行为在不同环境中变得一致:

System.debug(x.contains((Id)('012A0000000qv2z')));

那么也许 Apex 改变了新版本中的类型提升规则?

4

1 回答 1

2

我看了一下这个。这是对 Apex 中 Set 的新实现中的类型操作逻辑的无意更改(新的 impl 支持用户定义的类型,万岁!)。我已经提交了一个错误,我们将在未来的补丁中解决这个问题(我不能就何时做出承诺)。感谢您指出这个问题并给出如此简洁的重现。

格雷格费

于 2012-09-28T21:07:31.957 回答