gpt4 book ai didi

actionscript-3 - 是否有用于 ActionScript/Flex 的聪明的空指针检查器实用程序类?

转载 作者:行者123 更新时间:2023-12-04 05:00:51 25 4
gpt4 key购买 nike

问题涉及在调用方法或变量之前检查变量是否为空:

if(order && order.reference && order.reference.quote)
{
var length:int = order.reference.quote.findLength();
}

有一个函数可以用于检查直到最后一个对象变量的空指针的任何对象,这不是很好吗:


     // This would check first if order, then order.reference, then order.reference.quote      
//was null
if(NullUtil.notNull(order.reference.quote))
{
.....
}

有什么想法吗?

最佳答案

其他一些语言使用存在访问运算符,如 ?. (见 CoffeeScript)

如果您不太担心性能,您可以执行以下操作:

function notNull(object:*, properties:String):Boolean
{
if (object == null) return false;
var props:Array = properties.split(".")
for(var i:uint = 0; i < props.length; i++)
{
if(object[props[i]] == null) return false;
object = object[props[i]]
}

return true;
}

然后使用它: notNull(order, "reference.quote");
但这不是很漂亮,但你可以用一些 Proxy 把它清理一下。魔法。

例如,考虑以下代码:
import flash.utils.Proxy;
import flash.utils.flash_proxy;

dynamic class Existential extends Proxy {

private var _object:*;


public function Existential(object:*) {
_object = object;
}

flash_proxy override function getProperty(name:*):* {
var object:* = _object;

if (object == null) return null;

var props:Array = name.toString().split("$");

for(var i:uint = 0; i < props.length; i++)
{
if(object[props[i]] == null) return null;
object = object[props[i]]
}

return object;
}
}

然后,您可以使用它来包装其他对象并使用 $ 访问它们。而不是 .作为临时存在的 setter/getter 。
    obj = {};
eObj = new Existential(obj);
eObj.what$is$this // null

obj = { what: { "is": { "this": 1 } } } ;
eObj = new Existential(obj);
eObj.what$is$this // 1

但我想性能会很糟糕,我不想将它用于任何性能关键的生产代码。但它可能会给你一些想法。

关于actionscript-3 - 是否有用于 ActionScript/Flex 的聪明的空指针检查器实用程序类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16172786/

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