Непонятка при выводе типов
От: FDSC Россия consp11.github.io блог
Дата: 07.08.11 20:26
Оценка:
Есть функция
      public variant SplittedExpr
      {
          | SimpleExpr {val : string;}
          | InnerExpr  {val : list[SplittedExpr];}
      }
              def getInnerText(x: SplittedExpr.InnerExpr): string
              {
                  when (x.val.Length == 0)
                      return "";
                  when (
                            ! x.val.Exists(
                                            y =>
                                                match (y)
                                                {
                                                    | SplittedExpr.InnerExpr => true
                                                    | SplittedExpr.SimpleExpr => false
                                                }
                                                || (y :> SplittedExpr.SimpleExpr).val.Length > 0
                                          )
                        )
                    return "";

                  /*if (x.val.Length == 1)
                      innerLine(x.val) // не делаем скобок, если в них только один элемент
                  else*/
                      "\r\n" + tabs + "(\r\n" + innerLine(x.val) + "\r\n" + tabs + ")"
              }


Компилируется нормально

Теперь меняю одну строку в match (выделил жирным)

def getInnerText(x: SplittedExpr.InnerExpr): string
              {
                  when (x.val.Length == 0)
                      return "";
                  when (
                            ! x.val.Exists(
                                            y =>
                                                match (y)
                                                {
                                                    | SplittedExpr.InnerExpr => true
                                                    | _                      => false
                                                }
                                                || (y :> SplittedExpr.SimpleExpr).val.Length > 0
                                          )
                        )
                    return "";

                  "\r\n" + tabs + "(\r\n" + innerLine(x.val) + "\r\n" + tabs + ")"
              }


Получаю на строке чуть ниже (y :> SplittedExpr.SimpleExpr).val.Length > 0
следующую ошибку


DumpAst\DumpContext\Macro1.n(54,53): error :
 cannot convert DumpContext.PrintDumpImpl.SplittedExpr.InnerExpr to DumpContext.PrintDumpImpl.SplittedExpr.SimpleExpr
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.