haskell学习笔记(9)-再谈模式匹配

我们在写一个函数时,有一个很通用的步骤,即从传入的参数中进行一些预处理,比如从对象中取出某个属性,然后声明一些局部变量。

例如将一个Point类的xy属性相加,我们一般会这样写(不用考虑此函数本身的意义了…)

 public double add(Point p)
    {
        int x=p.x;
        int y=p.y;

        return x+y;
    }

虽然直接return p.x+p.y也可以,但总归是要有一个从对象中取数据的过程。
haskell的模式匹配,基本上就是将这个取数据的过程大大简化,直接将他们声明成参数了

--等价的haskell
pointAdd (Point x y) = x+y

然后还可以匹配直接量
下面这个在命令式语言里基本上就是一个switch

sayMe :: (Integral a) => a -> String 
sayMe 1 = "One!" 
sayMe 2 = "Two!" 
sayMe 3 = "Three!" 
sayMe 4 = "Four!" 
sayMe 5 = "Five!" 
sayMe x = "Not between 1 and 5" 

有人可能觉得这样写莫名其妙,其实这主要因为haskell是一个函数式的语言,将switch的几条判断,拆成多个函数,总之就是函数分的越细越好,越细越灵活,你就把haskell里的函数当成至高无上的一个存在就行了,整个语言都是围着函数转,所以能用多条函数写的时候,尽量不要用其他结构写(否则你还来学haskell干嘛啊)

haskell里的 _ 占位符基本上和python,lua,go里的差不多,唯一注意的就是他是匹配任意参数的,所以如果有个带 的函数写在最前面(如果一个全带 的函数写在最顶端,那他基本上就是错的),就需要注意他会不会覆盖后面的匹配。


欢迎关注我的github
https://github.com/luckyCatMiao

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值