package org.nutz.el.opt.object; import java.lang.reflect.Array; import java.util.Map; import org.nutz.el.opt.TwoTernary; /** * 数组读取 * 将'['做为读取操作符使用,它读取两个参数,一个是数组本身,一个是下标 * 多维数组,则是先读出一维,然后再读取下一维度的数据 * @author juqkai(juqkai@gmail.com) * */ public class ArrayOpt extends TwoTernary { public int fetchPriority() { return 1; } public Object calculate() { Object lval = calculateItem(left); Object rval = calculateItem(right); //@ JKTODO 这里要不要与, AccessOpt 里面相同的代码合并呢? if(lval instanceof Map){ Map<?,?> om = (Map<?, ?>) lval; if(om.containsKey(right.toString())){ return om.get(right.toString()); } } return Array.get(lval, (Integer)rval); } public String fetchSelf() { return "["; } }