Привет, я изучаю язык scala и задаю вопрос. Я читаю книгу, и один из примеров говорит, что от 0 до 2 такое же, как (0) .to (2). Как я могу интерпретировать этот синтаксис? Я имею в виду, я вижу, что это функция, которая принимает одно целое значение в качестве своего параметра. Но что такое «(0)». часть?? СпасибоСинтаксис вызова функции в scala
ответ
В scala любой метод, принимающий один параметр, может быть записан с помощью синтаксиса infix.
Так, например, если у вас есть
class Foo(x: Int) {
def add(y: Int) = x + y
}
val a = new Foo(42)
, то эти два метода звонки точно эквивалентны
a.add(4) // 46
a add 4 // 46
Причина, почему есть скобка вокруг 0
является то, что в более ранних версиях Скале 0.
было бы интерпретировано как число с плавающей запятой из-за неоднозначного значения .
(которое может быть как десятичным разделителем, так и селектором методов). Поскольку Scala 2,11 (или 2,10, я не помню), это было исправлено, так что теперь вы можете смело вводить
0.+(2) // Int: 2
и получить Int
назад, в то время как вы бы имели Float
в прошлом, как компилятор увидел бы его как
0.0 + (2) // Float: 2
Я имею в виду, я могу видеть, что
to
это функция, которая принимает один целое значение в качестве параметра.
Нет, это не функция, это метод.
методы вызываются отправкой сообщения объекту:.
foo.bar(baz)
Это означает, что «отправить сообщение bar
с объектом, на который ссылается baz
в качестве аргумента объект, на который ссылается foo
Это, в свою очередь, вызывают метод bar
в классе foo
«s или одного из его предков, который будет вызван.
Итак, to
это сообщение, 2
является аргументом, и 0
является получателем й e сообщение.
Scala позволяет использовать либо .
или пробел для отправки сообщения:
foo bar(baz)
// is the same as
foo.bar(baz)
Кроме того, при использовании пробелов для отправки сообщения, вы можете оставить вне скобок последнего списка аргументов, если он имеет только единственный аргумент:
foo bar baz
// is the same as
foo bar(baz)
И, наконец, круглые скобки используются не только для списков аргументов, они также используются для группировки. (. И кортежей литералов, а) Вы всегда можете окружить выражение со скобками, чтобы уточнить его преимущество:
(foo).bar(baz)
// is the same as
foo.bar(baz)
- 1. Scala - синтаксис вызова метода
- 2. Scala анонимный синтаксис функции
- 3. Синтаксис вызова функции?
- 4. Синтаксис вызова функции Lisp
- 5. Confusing Scala Синтаксис вызова функции более высокого порядка
- 6. Вызова ссылочной функции и синтаксис
- 7. Синтаксис бесконтактного вызова Scala с картой
- 8. Синтаксис для назначения функции переменной в Scala
- 9. Синтаксис рекурсивной вариационной функции в Scala
- 10. Различные Синтаксис для функции в Scala
- 11. Улучшенный синтаксис для анонимной функции Scala?
- 12. Scala Синтаксис для передачи класса функции
- 13. SCALA Создание функций Синтаксис
- 14. Понимание Scala нотации синтаксис
- 15. Scala правильный синтаксис использовать подчеркивание («_») в функции буквального с кортежем
- 16. "private [синтаксис]" в Scala
- 17. Непонятный синтаксис в Scala
- 18. Различные синтаксис Objective C для вызова функции
- 19. Унифицированные вызова Синтаксис и функции Указатели
- 20. Синтаксис Maxima для вызова функции n раз
- 21. Каков правильный синтаксис обратного вызова функции?
- 22. синтаксис вызова функции python ... result = foo() ['abc']
- 23. Синтаксис Python: запятая после вызова функции
- 24. Scala Тип Синтаксис
- 25. TemplateSyntaxError: неверный синтаксис выражения вызова функции
- 26. Scala синтаксис вложенных функций
- 27. Scala Currying синтаксис объяснение
- 28. Scala Функция Синтаксис
- 29. Синтаксис Scala: Breeze (scalanlp.org)?
- 30. Сложность понимания функции синтаксис
Кроме того, целые числа и другие примитивные типы автоматически преобразуются в эквивалентные типы объектов.Значение '0' является целым числом и автоматически преобразуется в' Int'. 'Int' имеет метод' to() ', который принимает один целочисленный аргумент. –
@Bob, это больше наоборот. «Int» - это тип объекта, который затем представляется примитивом в базовой JVM. –
стирание в 2.10, новое поведение в 2.11. Разница находится в 'val i = 0.;' которая была двойной, но теперь была ошибкой. –