Как я могу использовать Redux Saga & ldquo; call & rdquo; функция, когда имя функции является зарезервированным словом, и как мне выполнять вызовы функций в цепочке?

Другое решение кандидата с использованием регулярного выражения. Сохраняет порядок токенов, правильно соответствует нескольким токенам одного типа в строке. Недостатком является то, что регулярное выражение является довольно неприятным.

package javaapplication2;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class JavaApplication2 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        String num = "58.5+variable-+98*78/96+a/78.7-3443*12-3";

        // Terrifying regex:
        //  (a)|(b)|(c) match a or b or c
        // where
        //   (a) is one or more digits optionally followed by a decimal point
        //       followed by one or more digits: (\d+(\.\d+)?)
        //   (b) is one of the set + * / - occurring once: ([+*/-])
        //   (c) is a sequence of one or more lowercase latin letter: ([a-z]+)
        Pattern tokenPattern = Pattern.compile("(\\d+(\\.\\d+)?)|([+*/-])|([a-z]+)");
        Matcher tokenMatcher = tokenPattern.matcher(num);

        List<String> tokens = new ArrayList<>();

        while (!tokenMatcher.hitEnd()) {
            if (tokenMatcher.find()) {
                tokens.add(tokenMatcher.group());
            } else {
                // report error
                break;
            }
        }

        System.out.println(tokens);
    }
}

Образец вывода:

[58.5, +, variable, -, +, 98, *, 78, /, 96, +, a, /, 78.7, -, 3443, *, 12, -, 3]
1
задан Ryan Cogswell 18 January 2019 в 23:10
поделиться

1 ответ

Существует пара опций синтаксиса для работы с delete как зарезервированным словом:

  • Передать строку для имени функции в метод call
  • Получить ссылка на функцию delete в переменной с другим именем

Обе опции показаны ниже.

Для связанных функций вы просто разделяете цепочку на отдельные вызовы и используете результат одного вызова для выполнения следующего вызова. Я включил пример выполнения цепных вызовов после двух delete примеров.

import { call } from "redux-saga/effects";

const refResponse = {
  remove: () => {
    console.log("You removed me!");
  }
};
const action = {
  user: {
    delete: () => {
      console.log("You deleted me!");
    }
  }
};
const database = {
  ref: () => {
    console.log("Returning ref");
    return refResponse;
  }
};
export const starter = function*() {
  console.log("before call");
  yield call([action.user, "delete"]);
  console.log("after call using string for function name");
  const deleteFunc = action.user.delete;
  yield call([action.user, deleteFunc]);
  console.log("after call using function variable");

  console.log("before start of chained call");
  const result = yield call([database, "ref"]);
  console.log("before 2nd part of chained call");
  yield call([result, "remove"]);
};

Edit 9470nnlwmy

0
ответ дан Ryan Cogswell 18 January 2019 в 23:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: