Skip to content

Commit b682a42

Browse files
committed
list通过array设置值
1 parent 9f16e3b commit b682a42

File tree

3 files changed

+20
-7
lines changed

3 files changed

+20
-7
lines changed

src/main/java/com/ql/util/express/instruction/op/OperatorArray.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,11 @@ public OperateData executeInner(InstructionSetContext context, ArraySwap list) t
2828
Object tmpObject = p0.getObject(context);
2929

3030
if( tmpObject.getClass().isArray() == false){
31-
OperateData p1 = list.get(1);
32-
Object property = p1.getObject(context);
33-
//支持data.get(0) ->data[0]
31+
Object property = list.get(1).getObject(context);
32+
//支持data.get(index) ->data[index]
3433
if(tmpObject instanceof List && property instanceof Number) {
35-
Object r = ((List<?>) tmpObject).get(((Number) property).intValue());
36-
OperateData result = OperateDataCacheManager.fetchOperateData(r, r.getClass());
34+
int index = ((Number) property).intValue();
35+
OperateData result = OperateDataCacheManager.fetchOperateDataArrayItem((OperateData)p0,index);
3736
return result;
3837
}
3938
//支持data.code -> data['code']
@@ -42,6 +41,7 @@ public OperateData executeInner(InstructionSetContext context, ArraySwap list) t
4241
return result;
4342
}
4443
}
44+
//支持原生Array:data[index]
4545
int index = ((Number)list.get(1).getObject(context)).intValue();
4646
OperateData result = OperateDataCacheManager.fetchOperateDataArrayItem((OperateData)p0,index);
4747
return result;

src/main/java/com/ql/util/express/instruction/opdata/OperateDataArrayItem.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.ql.util.express.instruction.opdata;
22

33
import java.lang.reflect.Array;
4+
import java.util.List;
45

56
import com.ql.util.express.InstructionSetContext;
67
import com.ql.util.express.OperateData;
@@ -31,15 +32,23 @@ public Class<?> getType(InstructionSetContext context) throws Exception {
3132
}
3233
public Object getObjectInner(InstructionSetContext context){
3334
try {
34-
return Array.get(this.arrayObject.getObject(context),this.index);
35+
if(this.arrayObject.getObject(context) instanceof List){
36+
return ((List) this.arrayObject.getObject(context)).get(this.index);
37+
}else {
38+
return Array.get(this.arrayObject.getObject(context), this.index);
39+
}
3540
} catch (Exception e) {
3641
throw new RuntimeException(e);
3742
}
3843
}
3944

4045
public void setObject(InstructionSetContext context, Object value) {
4146
try {
42-
Array.set(this.arrayObject.getObject(context), this.index, value);
47+
if(this.arrayObject.getObject(context) instanceof List){
48+
((List) this.arrayObject.getObject(context)).set(this.index,value);
49+
}else {
50+
Array.set(this.arrayObject.getObject(context), this.index, value);
51+
}
4352
} catch (Exception e) {
4453
throw new RuntimeException(e);
4554
}

src/test/java/com/ql/util/express/cfuture/ArrayPorpertyMixTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,13 @@ public void testRun() throws Exception {
1717
String tests[] = new String[]{
1818
"request['AAAA'][0]['BBBB'][0]",
1919
"requestList[0]['AAAA'][0]['BBBB'][0]",
20+
"requestList[0]['AAAA'][0]['BBBB'][0]='10';return requestList[0]['AAAA'][0]['BBBB'][0];",
2021
"abc = NewList(1,2,3); return abc[1]+abc[2]",
22+
"abc = NewList(1,2,3); abc[1]=0;return abc[1]+abc[2]",
2123
"abc = NewMap('aa':1,'bb':2); return abc['aa'] + abc.get('bb');",
24+
"abc = NewMap('aa':1,'bb':2); abc['aa']='aa';return abc['aa'] + abc.get('bb');",
2225
"abc = [1,2,3]; return abc[1]+abc[2];",
26+
"abc = [1,2,3]; abc[1]=0;return abc[1]+abc[2];",
2327
};
2428

2529

0 commit comments

Comments
 (0)