AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 77424983
Accepted
Tom Price
Tom Price
Asked: 2023-11-05 14:45:07 +0800 CST2023-11-05 14:45:07 +0800 CST 2023-11-05 14:45:07 +0800 CST

Comportamento inesperado de `with-handlers` em Racket digitado

  • 772

Estou tentando lidar com certos tipos de erros no Racket digitado. O código a seguir funciona conforme esperado no Racket digitado e não digitado

(with-handlers
    ([exn:fail:contract:divide-by-zero?
      (lambda (e)
        (raise e))])
    (let ([x 0]
          [y 1])
      (display (/ y x))))

resultando na mensagem de erro

/: division by zero

Uma ligeira elaboração funciona em Racket não digitado:

(with-handlers
    ([exn:fail:contract:divide-by-zero?
      (lambda (e)
        (displayln "oops!")
        (raise e))])
    (let ([x 0]
          [y 1])
      (display (/ y x))))
oops!
/: division by zero

Porém dá a seguinte mensagem de erro no Racket digitado:

Type Checker: No function domains matched in function application:
Domains: (U (Rec flat (U (Immutable-HashTable flat flat) (Immutable-Vectorof flat) (Pairof flat flat) Boolean Bytes Char Complex Keyword Null String Symbol)) exn) Any 
         (U (Rec flat (U (Immutable-HashTable flat flat) (Immutable-Vectorof flat) (Pairof flat flat) Boolean Bytes Char Complex Keyword Null String Symbol)) exn) 
Arguments: Any
 in: (raise e)

Alguém pode explicar o que está acontecendo aqui ou sugerir uma solução alternativa?

exception
  • 1 1 respostas
  • 13 Views

1 respostas

  • Voted
  1. Best Answer
    Shawn
    2023-11-05T17:32:39+08:002023-11-05T17:32:39+08:00

    Enquanto no Racket normal o primeiro argumento raisepode ser qualquer valor, por algum motivo no Typed Racket ele é limitado a uma lista de tipos específicos, incluindo a exnhierarquia de estruturas.

    Descobri que quase sempre é necessário especificar explicitamente os tipos de argumentos das funções; Typed Racket normalmente não os infere e fornece o Anytipo genérico. Assim, para satisfazer raiseo tipo de:

    #lang typed/racket/base
    
    (with-handlers
        ([exn:fail:contract:divide-by-zero?
          (lambda ([e : exn]) ; The type of a struct is usually the name of the struct
            (displayln "oops!")
            (raise e))])
        (let ([x 0]
              [y 1])
          (display (/ y x))))
    
    • 1

relate perguntas

  • Por que torch.cuda.OutOfMemoryError não é uma classe de erro válida?

  • Como interpretar a referência de memória no lado direito da equação de montagem?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    destaque o código em HTML usando <font color="#xxx">

    • 2 respostas
  • Marko Smith

    Por que a resolução de sobrecarga prefere std::nullptr_t a uma classe ao passar {}?

    • 1 respostas
  • Marko Smith

    Você pode usar uma lista de inicialização com chaves como argumento de modelo (padrão)?

    • 2 respostas
  • Marko Smith

    Por que as compreensões de lista criam uma função internamente?

    • 1 respostas
  • Marko Smith

    Estou tentando fazer o jogo pacman usando apenas o módulo Turtle Random e Math

    • 1 respostas
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 respostas
  • Marko Smith

    Por que 'char -> int' é promoção, mas 'char -> short' é conversão (mas não promoção)?

    • 4 respostas
  • Marko Smith

    Por que o construtor de uma variável global não é chamado em uma biblioteca?

    • 1 respostas
  • Marko Smith

    Comportamento inconsistente de std::common_reference_with em tuplas. Qual é correto?

    • 1 respostas
  • Marko Smith

    Somente operações bit a bit para std::byte em C++ 17?

    • 1 respostas
  • Martin Hope
    fbrereto Por que a resolução de sobrecarga prefere std::nullptr_t a uma classe ao passar {}? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 Você pode usar uma lista de inicialização com chaves como argumento de modelo (padrão)? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi Por que as compreensões de lista criam uma função internamente? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A formato fmt %H:%M:%S sem decimais 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python std::views::filter do C++20 não filtrando a visualização corretamente 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute Por que 'char -> int' é promoção, mas 'char -> short' é conversão (mas não promoção)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa Por que o construtor de uma variável global não é chamado em uma biblioteca? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis Comportamento inconsistente de std::common_reference_with em tuplas. Qual é correto? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev Por que os compiladores perdem a vetorização aqui? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan Somente operações bit a bit para std::byte em C++ 17? 2023-08-17 17:13:58 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve