killme2008 / killme2008/aviatorscript

多级字段取值自动判空能力

Aperta
#561 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Lingua principale
Java
Stelle
5.2k
Fork
906
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

### 背景
在表达式使用的过程中,我们经常会通过表达式从上下文中进行取值。例如:
```java
JSONObject context = new JSONObject();
JSONObject result = new JSONObject();
Map featureMap = Maps.newHashMap();
featureMap.put("f1", "1L");
result.put("featureMap", featureMap);
context.put("result", result);
```
有一个context作为上下文,需要取其featureMap的f1字段值,我们的表达式会写成
```shell
## $=context

$.result.featureMap.f1
```

### 存在的问题

但是,这种写法需要使用方自己保证 $、result、featureMap都必须为非空的字段,否则aviator会在执行过程中抛出异常;而在使用过程中我们通常是无法确保的,所以需要进行判空操作。此时,表达式就需要写成如下形式:
```shell
if($!=nil) {
if($.result!=nil) {
if($.result.featureMap!=nil) {
return $.result.featureMap.f1;
}
}
}
```

### 需求期望

这样的写法虽然能够保障表达式的正常执行,但是在多级字段的取值使用中对用户是不太友好的,我们希望能够可以通过类似mvel的方法直接进行判空,如下:
```shell
$.?result.?featureMap.?f1
```
通过.?的语法对其左值进行判空,当其左值为空时直接返回空

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Direzione di ricerca

La issue non indica file o test. Inizia individuando i punti di ingresso del parser e del valutatore delle espressioni per l'accesso ai campi annidati, quindi traccia il modo in cui i valori null attualmente producono eccezioni. Il lavoro è completo quando la sintassi proposta `.?` è supportata a ogni livello e restituisce null quando il suo valore a sinistra è null, con copertura per gli esempi annidati.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
java
Ambito
compilers
Tipo di issue
Funzionalità
Difficoltà
5/5
Tempo stimato
Più di una settimana
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
25/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.