Какие типы ожидаются от многоточечной нотации?
Рассматривать:
#include "share/atspre_staload.hats"
fun plus_int_int(x: int, y: int): int = x + y
symintr .plus
overload .plus with plus_int_int
implement main0() =
println!("4+4+4 = ", ((4).plus(4)).plus(4))
Это работает, и ясно, что это не может быть 4.plus()
как 4.
берется как поплавок. Что я хотел бы знать, так это почему (4).plus(4).plus(4)
Работа? ATS не находит допустимой перегрузки для второго .plus
, который говорит мне, что он ожидает какой-то другой тип, чем (int, int) -> int
, Какой тип это ожидает?
1 ответ
Решение
Текущий синтаксический анализатор ATS2 интерпретирует
(4).plus(4).plus(4)
как
((4).plus)((4).plus)(4)
Я не могу легко исправить парсер. Я подумаю об этом при реализации ATS3.