Могу ли я как-то отправить математический знак (+, -, *) в качестве параметров функции? Я хочу позвонить reduce()
функции для разных знаков.Математический знак как функциональный параметр
ответ
В быстрых знаках функция имя для заданных математических операций. Чтобы передать знак как параметр, тип параметра должен быть функцией, которая принимает два числа и возвращает число. Если команда + щелчок на любом знаке, вы увидите его определение следующим образом:
общественного FUNC + (LHS: Uint8, шк: Uint8) -> Uint8
общественного FUNC + (LHS: INT8, РИТ : iNT8) -> iNT8
общественного FUNC + (LHS: uInt16, РИТ: uInt16) -> uInt16
общественного FUNC + (LHS: Int16, шк: Int16) -> Int16
общественного функ + (lhs: UInt32, rhs: UInt32) -> UInt32
общественного FUNC + (LHS: Int32, шк: Int32) -> Int32
общественного FUNC + (LHS: UInt64, шк: UInt64) -> UInt64
общественного FUNC + (LHS: Int64, РИТ: Int64) -> Int64
общественного FUNC + (LHS: UINT, шк: UINT) -> UInt
общественного FUNC + (LHS: Int, РИТ: Int) -> Int
В вашем случае ваша функция уменьшения должна выглядеть следующим одной
func reduce(sign: (Int,Int)->Int) -> Int{
return sign(2,3)
}
reduce(*)
reduce(-)
Отправить как символ, а затем перейти к идентификации:
func acceptASign(sign: Character) {
switch sign {
case "+":
//do some addition
case "-":
//do some subtraction
case "*":
//do some multiplication
case "/":
//do some division
default:
break;
}
}
Да, вы можете отправить любой бинарный оператор функции reduce()
, обеспечивая исходное значение и элементы в коллекции того же типа, и, таким образом, оператор может быть применен.
Подумайте об операторах как о функциях/замыканиях, и вы поймете, почему это возможно в Swift. На самом деле операторы - это как функции - они называются замыканиями.
Также подумайте о том, как можно добавить новые операторы - вы определяете функцию с именем оператора, которая принимает ряд параметров, равных значению оператора.
Таким образом, следующий синтаксически правильный, и обеспечивает ожидаемый выход (6
):
[1,2,3].reduce(0, combine: +)
func doSomeCalculation(_ fun:((Int,Int)->Int)) -> Int {
return fun(12,13)
}
doSomeCalculation(+) // 25
doSomeCalculation(-) // -1
То же самое может быть сделано для UInt
, то IntXX
и т.д.
+
является в основном просто функция, которая принимает два аргумента и возвращает ее сумму. Поскольку func
являются объектами, подобными любым другим, вы можете передавать их как таковые.
Точно так же вы можете пройти +
в reduce
.
- 1. Класс как функциональный параметр
- 2. Использование NSArray как функциональный параметр
- 3. Функциональный объект как параметр шаблона
- 4. Функция Указатель как функциональный параметр
- 5. Указатель пустоты как функциональный параметр
- 6. Inherited generic как функциональный параметр
- 7. Как передать предикат как функциональный параметр
- 8. Сбросить массив через функциональный параметр
- 9. Идиоматический эликсир - Функциональный параметр Стиль
- 10. C++ - Использовать имя класса как функциональный параметр
- 11. IntelliJ: объект Autocomplete как функциональный параметр
- 12. прохождение интерфейса как функциональный параметр (PHP)?
- 13. Java Passing in Type как функциональный параметр
- 14. Функциональный указатель как параметр функции qsort
- 15. Php class Variable как функциональный параметр
- 16. отдельные цифры и математический знак из строки в java
- 17. , выбирая математический знак из ячейки и используя формулу vba
- 18. Как лучший параметр, как знак игнорировали
- 19. Что означает оператор/математический знак «>>» в Javascript?
- 20. C++ Указатель на указатель на функциональный параметр
- 21. Передача нескольких объектов на функциональный параметр сразу
- 22. Как ограничить функциональный параметр как массив фиксированного размера?
- 23. JQuery - Как математический одушевленных
- 24. Как извлечь математический выход
- 25. Как остановить математический ответ?
- 26. C++ Custom Comparison Function с шаблоном как функциональный параметр
- 27. Пропустить PHP ассоциативный массив курсора как функциональный параметр
- 28. C - Функциональный параметр как случай в операторе switch
- 29. как включить параметр опции-опции в функциональный модуль
- 30. Передача результатов RealmDB Объект как Swift 2 Функциональный параметр
Это нормально, но так неуклюжий: ( –