Как исправить ошибку статической области при обращении к статической переменной в моем скрипте groovy? - PullRequest
0 голосов
/ 21 июня 2019

У меня есть скрипт, который экспортирует таблицы Excel в CSV, и я пытаюсь экранировать запятые, кавычки и тому подобное.Я создал статический метод, который кодирует значение ячейки, к которой осуществляется доступ.Этот метод ссылается на статическую переменную, в которой хранится значение Pattern.compile ().

Я пытался использовать def rxquote в этом методе, но это дает мне другую ошибку, утверждая, что использование статического модификатора перед объявлением моей переменной rxquote недопустимо,Ниже приведен код, за которым следует сообщение об ошибке.

#!/usr/bin/env groovy
@Grab(group = 'org.apache.poi', module = 'poi', version = '4.1.0')
@Grab(group = 'org.apache.poi', module = 'poi-ooxml', version = '4.1.0')

import java.util.regex.*
import org.apache.poi.xssf.usermodel.XSSFWorkbook
import org.apache.poi.ss.usermodel.*

static Pattern rxquote = Pattern.compile("\"")
static private String encodeValue(String value) {
    boolean needQuotes = false;
    if ( value.indexOf(',') != -1 || value.indexOf('"') != -1 ||
         value.indexOf('\n') != -1 || value.indexOf('\r') != -1 ){
        needQuotes = true;
    }
    Matcher m = rxquote.matcher(value)
    if ( m.find() ) {
        needQuotes = true
        value = m.replaceAll("\"\"")
    }
    if ( needQuotes ) {
        return "\"" + value + "\""
    } 
        else return value;
    }

//for(){
//   ... export csv code (which works on its own)
//}

Сообщение об ошибке при компиляции:

Apparent variable 'rxquote' was found in a static scope but doesn't refer to a local variable, static field or class. Possible causes:
You attempted to reference a variable in the binding or an instance variable from a static context.
You misspelled a classname or statically imported field. Please check the spelling.
You attempted to use a method 'rxquote' but left out brackets in a place not allowed by the grammar.
 @ line 27, column 17.
       Matcher m = rxquote.matcher(value);
                   ^

Я попытался исследовать проблему и нашел несколько подобных вопросов здесь, но ни один изНасколько я могу судить, решения, похоже, применимы к этой ситуации.Я ожидал, что статическое объявление переменной поможет избежать этой проблемы, но, похоже, что-то мне не хватает.

1 Ответ

1 голос
/ 21 июня 2019

вы не можете объявить статическую переменную в скрипте groovy.

разрешено только в классе Groovy / Java.

ошибка не соответствует ситуации.

должно быть: Модификатор «static» здесь не разрешен.

В качестве обходного пути для статических переменных вы можете использовать некоторый класс:

class Const{
    static String bar = 'test'
}

static private String foo() {
    return Const.bar
}

foo()
...