gpt4 book ai didi

Racket 强制输入类型的功能

转载 作者:行者123 更新时间:2023-12-04 14:11:11 25 4
gpt4 key购买 nike

我想强制输入到 Racket 中的函数的数据类型。例如,在这个函数中,我希望得到整数并在有人输入字符串时抛出错误。

在 Racket 中是否有标准方法来强制执行此操作?

(sum-coins pennies nickels dimes quarters)
pennies : integer?
nickels : integer?
dimes : integer?
quarters : integer?

最佳答案

是的,有两种标准方式。

契约(Contract)

Contracts检查条件并在运行时引发错误:

#lang racket

(define/contract (sum-coins pennies nickels dimes quarters)
(-> integer? integer? integer? integer? integer?)
(+ (* 1 pennies)
(* 5 nickels)
(* 10 dimes)
(* 25 quarters)))

(sum-coins 1 2 3 4)
;; => 141
(sum-coins "1" 2 3 4)
; sum-coins: contract violation
; expected: integer?
; given: "1"
; in: the 1st argument of
; (->
; integer?
; integer?
; integer?
; integer?
; integer?)
; contract from: (function sum-coins)
; blaming: /tmp/so.rkt
; (assuming the contract is correct)
; at: /tmp/so.rkt:3.18
; Context (errortrace):
; /tmp/so.rkt:11:0: (sum-coins "1" 2 3 4)
; /tmp/so.rkt:11:0: (sum-coins "1" 2 3 4)

打字 Racket

或者您可以使用 Typed Racket ,它在编译时检查类型:
#lang typed/racket

(define (sum-coins [pennies : Integer]
[nickels : Integer]
[dimes : Integer]
[quarters : Integer])
(+ (* 1 pennies)
(* 5 nickels)
(* 10 dimes)
(* 25 quarters)))

(sum-coins 1 2 3 4)
;; => 141
(sum-coins "1" 2 3 4)
; /tmp/so2.rkt:14:11: Type Checker: type mismatch
; expected: Integer
; given: String
; in: "1"

关于 Racket 强制输入类型的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32462429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com