Scala Неявный синтаксис в полиморфных методах

Я новичок в Scala, читаю библиотека синтаксического анализа и дошел до синтаксиса, который не понимаю:

def parseA[_: P] = P("a")

val Parsed.Success(value, successIndex) = parse("a", parseA(_))

Я хочу иметь возможность объединить эти строки в одну, т.е.

val Parsed.Success(value, successIndex) = parse("a", P("a"))

но это дает ошибку компиляции:

Error:(8, 61) overloaded method value P with alternatives:
  [T](t: fastparse.P[T])(implicit name: sourcecode.Name, implicit ctx: fastparse.P[_])fastparse.P[T] <and>
  => fastparse.ParsingRun.type
 cannot be applied to (String)
Error occurred in an application involving default arguments.
    val Parsed.Success(value, successIndex) = parse(source, P("a"))

Как должна быть написана эта строка? И можете ли вы назвать синтаксические концепции, используемые для максимального увеличения моего обучения?

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
0
164
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

_: P совпадает с (implicit ctx: P[_]), это означает, что метод запрашивает неявный параметр типа P[_](подчеркивание означает, что внутренний тип не важен. См. Каковы все виды использования подчеркивания в Scala?).
P("a") вызывает метод это, который требует такой неявной области видимости, и поэтому во втором примере он не компилируется, потому что не нашел неявный параметр.
Здесь предъявляются иски к неявным, экзистенциальным типам и макросам...

Все они являются очень продвинутыми методами. Если вы только начинаете, я бы посоветовал оставить их на потом.
Имплициты очень важны и полезны, я бы начал с них, но сначала убедитесь, что вы чувствуете себя комфортно с "обычный" Scala (что бы это ни значило).


Что касается второго вопроса, я думаю, это должно сработать.

def program[_: P] = parse("a", P("a"))
val Parsed.Success(value, successIndex) = program

Это вызвало некоторые ошибки компиляции: первая строка: Error:(27, 37) type mismatch; found : fastparse.package.P[Unit] (which expands to) fastparse.ParsingRun[Unit] required: fastparse.P[_] => fastparse.P[?] (which expands to) fastparse.ParsingRun[_] => fastparse.ParsingRun[?] Error occurred in an application involving default arguments. def program[_: P] = parse("a", P("a")) также вторая строка сказала could not find implicit value

Mazerunner72 22.05.2019 19:15

@ Mazerunner72 хм ... здесь происходит много всего, я бы действительно не стал заморачиваться с "рефакторинг" одной строкой, особенно если бы это работало раньше. Кроме того, fastparse вводит свой собственный DSL, я не использовал библиотеку раньше, и, похоже, мне нужно было бы прочитать совсем немного, чтобы понять, что происходит, поэтому, если у вас возникли проблемы с библиотекой, вы можете открыть новый вопрос, явно упомянув в заголовке вы используете эту библиотеку, чтобы люди, которые ее знают, могли ее увидеть и, надеюсь, ответить на нее. Кроме того, вы можете попробовать спросить грязь вместо этого есть даже канал только для fastparse.

Luis Miguel Mejía Suárez 22.05.2019 20:00

Другие вопросы по теме