- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对“Maybe”和“Either”类型以及它们与 EAFP(更容易请求原谅许可)的假设关系存有疑问。我使用过 Python 并习惯于在异常世界中使用 EAFP 范式。
经典示例:除以零
def func(x,y):
if not y:
print "ERROR."
else: return (x/y)
def func(x,y):
try:
return (x/y)
except: return None
func :: (Eq a, Fractional a) => a -> a -> a
func x y = if y==0 then error "ERROR." else x/y
func :: (Eq a, Fractional a) => a -> a -> Maybe a
func x y = if y==0 then Nothing else Just (x/y)
func
不检查
y
.对于 Haskell,情况正好相反:
y
被检查。
最佳答案
Haskell 风格与 Maybe
和 Either
强制您在某个时候检查错误,但不必立即检查。如果您现在不想处理错误,您可以将它传播到您的其余计算中。
以假设的安全除以 0 为例,您可以在更广泛的计算中使用它,而无需进行显式检查:
do result <- func a b
let x = result * 10
return x
Maybe
返回者
func
: 你只要把它解压到
result
变量使用 do-notation,它会自动在整个过程中传播失败。结果是你不需要立即处理潜在的错误,但计算的最终结果被包裹在
Maybe
中。本身。
Maybe
表示。或
Either
.
关于haskell - Haskell 中的 EAFP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29682511/
我对“Maybe”和“Either”类型以及它们与 EAFP(更容易请求原谅许可)的假设关系存有疑问。我使用过 Python 并习惯于在异常世界中使用 EAFP 范式。 经典示例:除以零 def fu
我是 Python 新手,正在尝试了解 Python 方式® 我了解了 EAFP 原则并且喜欢它,但是在这个示例中如何应用它? 编辑:我只关心item没有children属性,而不关心dosometh
在 Python 中编写并发/多线程代码时,遵循“请求宽恕比请求许可更容易”(EAFP)而不是“三思而后行”(LBYL)是否特别重要? Python 异常动态的特性意味着几乎任何事情(例如,属性删除)
在一般情况下和下一个示例中,请求宽恕而不是许可是 Java 的一种好习惯吗? 例子是: try { Cell value = array2D[rowIndex][columnIndex]; }
在几个地方(here 和 here)有人说 Python 强调“请求宽恕比请求许可更容易”(EAFP)应该用异常只应该真正调用的想法来缓和异常(exception)情况。考虑以下情况,我们在优先级队列
虽然我可以找到很多关于 Python 的“EAFP 与 LBYL”的资料,但我找不到任何关于 Ruby 的指南。我自己的经验是,Ruby 至少和 Python 一样支持异常处理,但与整个社区相比,我自
我是一名优秀的程序员,十分优秀!