Упоротость по js не проходит бесследно. Мне надо на яве сляпать приёмник команд из amqp. Команды имеют вид «<имя> <параметр 0> <...>». То есть я просто бедру строку из amqp, потом делаю split по пробелу, по первому элементу выбираю команду, остальное все скидываю в массив аргументов. Если он короче, чем может взять моя функция, то выплёвываем ошибку, если нет, вызываем функцию и выплёвываем то, что она вернёт.
Вроде всё просто и на js я бы это быстро накидал, но тут я что-то затупил. Во-первых стрелки (которые лямблы) работают на какой-то магии:
interface TwoArgInterface {
public int operation(int a, int b);
}
public class MyClass {
public static void main(String javalatte[]) {
TwoArgInterface plusOperation = (a, b) -> a + b;
System.out.println("Sum of 10,34 : " + plusOperation.operation(10, 34));
}
}
TwoArgInterface plusOperation = (a, b) -> a + b;
Что это значит??Как он узнаёт, что лямбду надо прицепить к
int operation
??Что будет, если в интерфейсе больше двух методов?
Как туда запихать больше двух методов?
Но это ладно. Тут в принципе возможно сделать метод, который принимает функцию, чтобы нахерачить что-то в виде:
//js
commands : {
setLogQueue : {
argc : 1,
run : (arg) -> {main.setLogQueue(arg); return "Ok";}
}
...
}
...
//cmd - command string from message, agrs - array from message.
command = commands[cmd]
if (command) {
if (command.argc < args.length) return "I need MORE args";
return command.run(...args);
} else {
return "Command "+cmd+" not found.";
}