public OperateData executeInner()

in src/main/java/com/ql/util/express/instruction/op/OperatorArray.java [23:46]


    public OperateData executeInner(InstructionSetContext parent, ArraySwap list) throws Exception {
        OperateData firstOperateData = list.get(0);
        if (firstOperateData == null || firstOperateData.getObject(parent) == null) {
            throw new QLException("对象为null,不能执行数组相关操作");
        }

        Object tmpObject = firstOperateData.getObject(parent);

        if (!tmpObject.getClass().isArray()) {
            Object property = list.get(1).getObject(parent);
            //支持data.get(index) ->data[index]
            if (tmpObject instanceof List && property instanceof Number) {
                int index = ((Number)property).intValue();
                return OperateDataCacheManager.fetchOperateDataArrayItem(firstOperateData, index);
            }
            //支持data.code -> data['code']
            if (property instanceof String || property instanceof Character) {
                return OperateDataCacheManager.fetchOperateDataField(tmpObject, String.valueOf(property));
            }
        }
        //支持原生Array:data[index]
        int index = ((Number)list.get(1).getObject(parent)).intValue();
        return OperateDataCacheManager.fetchOperateDataArrayItem(firstOperateData, index);
    }