English 中文(简体)
利用Haskell的类型取代声明或用其他语文进行核查
原标题:Using Haskell s types to replace assert statements or if checks in other languages

如果问题非常基本,我对Haskell仍然非常新。 请允许我说,我的职能只有两种数字,即黄金配给(1.618),我如何界定myfun <>myfunx> y,只使用黄金比率。 如果我从我的方案(汇编错误)中援引无黄金比例的神话,会发生什么? 如果在运行时通过用户投入发出没有黄金比率的电话,会发生什么情况?

最佳回答

您可能希望有一个ADT,该数字只能用金字数构造,然后书写我方接受这一数据类型。

我将Integer视为一个基类,但你可以使用其他类型(如:双向或Float)或甚至多变。

(1) 使ADT成为可能

module Golden (Gold, getGold, buildGold) where

data Gold = G Integer Integer

getGold :: Gold -> (Integer, Integer)
getGold (G x y) = (x, y)

buildGold :: Integer -> Integer -> Maybe Gold
buildGold x y
    | isGolden x y = Just (G x y)
    | otherwise    = Nothing

该模块出口<代码>Gold,但不是构件(即<代码>G)。 因此,获得<代码>Gold值的唯一途径是buildGold,该编码进行操作时间检查,但只有一次,因此,所有消费者均可使用和假设黄金价值为黄金比率而无需检查。

2) 利用ADT建造myfun

myfun :: Gold -> ???
myfun g = expr
  where (x, y) = getGold g

现在,如果你试图用非刚果籍号码(不使用<代码>Gold的数值)打上“密码>,那么你就会发现一个汇编时的错误。

Recap To build golden numbers buildGold function must be used, which forces the number to be checked.

通知:什么时候被检查! 您有一份汇编的时间保证,即<代码>myfun,以及你希望使用<代码>Gold的所有其他功能,总是提供黄金比率。 方案投入(来自用户、网络或从未有过的)仍需要经过时间检查,而<代码>buildGold提供;显然,从来不会有一个方案,让人类赢得某种不受欢迎的东西。

你们对问题的评论中提出的备选办法也值得考虑。 如果大家需要一个单一功能,myfun,那么,哪怕是myfun • (Integer, Integer)-> Maybe ?

问题回答

最为容易的技术是使用smart Constructionors,后者使用从Int到GoldInt的功能,检查贵方的数值是否符合要求。

有了更多的努力,你可以使用,以确保不需要进行时间检查,但是,鉴于你是一开始,我将坚持智能建筑方法。

上文提到的答案就是这一区别。





相关问题
Selenium not working with Firefox 3.x on linux

I am using selenium-server , selenium rc for UI testing in my application . My dev box is Windows with FireFox 3.5 and every thing is running fine and cool. But when i try to run selenium tests on my ...

Best browser for testing under Safari Mobile on Linux?

I have an iPhone web app I m producing on a Linux machine. What s the best browser I can use to most closely mimic the feature-limited version of Safari present on the iPhone? (It s a "slimmed down" ...

Code Coverage Tools & Visual Studio 2008 Pro

Just wondering what people are using for code coverage tools when using MS Visual Studio 2008 Pro. We are using the built-in MS test project and unit testing tool (the one that come pre-installed ...

Is there any error checking web app cralwers out there?

Wondering if there was some sort of crawler we could use to test and re-test everything when changes are made to the web app so we know some new change didn t error out any existing pages. Or maybe a ...

热门标签