商品打折的相关知识点和分析 | 学习笔记

简介: 快速学习商品打折的相关知识点和分析

开发者学堂课程【Scala 核心编程 - 进阶商品打折的相关知识点和分析学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/610/detail/9083


商品打折的相关知识点和分析


内容介绍:

一、样例类初步介绍

二、三个重要知识点

三、总结


一、样例类初步介绍

1.设计的介绍

首先设计一个 item,即子类,之后设计一个样例类 casebook,再设计对商品的描述和价格的说明,新的元素都可以往里面添加。

之后继承 item,让其成为 item 的一个子类,将来可以统一用 item 进行传递。紧接着设计了一个 bundle,即捆绑的意思。

abstract class Item //项

case class Book(description: String,price:Double) extends Itemcase class Bundle(description: String,discount: Double,item:ltem*)extends Item

里面进行打折的说明,discount double 为打折的钱数。 item:item*是将item变成了一个可变参数,以后可以对其进行任意的变换。

紧接着继承了 item,可以 将book 传入进去,可以实现 bundle 的嵌套和再嵌套。

创建样例类

abstract class ltem//项

case class Book(description: String, price:Double)extends Item

//Bundle 捆, discount:Double 折扣,item: ltem*.case class Bundle(description: String, discount: Double,item: ltem") extends Item匹配嵌套结构(就是Bundle的对象)

val sale= Bundle("书籍",10,Book("漫画",40),Bundle("文学作品",20,Book("《阳关》",80),Book("《围城》",30)))

上述案例中,设计的具体的事例:“书籍,10,Book(”漫画“,40),意思是漫画书40元,打折10元,紧接着bundle后面还可以添加,因此嵌套了一个bundle。上述案例表示有一捆书,单本漫画(40-10)+文学作品(两本书)(80+30-20)=30+90=120.0

创建一个saleD的demo,先设计样例类:

abstract class Item //项

case class Book(description: String,price:Double) extends Itemcase class Bundle(description: String,discount: Double,item:ltem*)extends Item

给出一个具体的打折案例

abstract class ltem//项

case class Book(description: String, price:Double)extends Item

//Bundle 捆, discount:Double 折扣,item: ltem*.case class Bundle(description: String, discount: Double,item: ltem") extends Item


二、三个重要知识点

1.知识点一:将 descr 绑定到第一个 book 的描述

请思考:如何取出

val sale = Bundle("书籍",10,Book("漫画",40),Bundle("文学作品”,20,Book("《阳关》",80),Book("《围城》",30)))

这个嵌套结构中的“漫画”

val Tes=sale match

//如果我们进行对象匹配时,不想接受某些值,则使用_忽略即可,_*表示所有case_Bundlel Book(desc *=>desc

如何取出漫画里面的内容,对对象匹配,如果要提出漫画内容,这时需要提供对象,用 case 进行提供。紧接着后面需要加入的元素,可以用“_*”来表示。

如果不想接收某些值,直接用下划线表示忽略,如果需要忽略所有,那就用“_*”来表示。如何将dac返回到book的描述。

object  SalesDemo  {

def main(args:Array[String]): Unit=(

//这里给出了一个具体的打折的案例

// 120.

val sale = Bundle("书籍”,10,Book("漫画”,40),BundLe(”文学作品”,20,Book("《阳关》”,80),Book(”《围城》”,30)))

//使用casd

val res = sale match

//如果我们进行对象匹配时,不想接受某些值,则使用_忽略即可, *表示所有case Bundle(_,_,Book(desc,_),_*)=> desc

此时的目标:提取出使用的case语句,得到漫画的相关值:

object SalesDeme [

def main(args: Array[String]): Unit=(

//这里给出了一个具体的打折的案例

// 120.

val sale = Bundle("书籍”,10,Book("漫画”,40),Bundle(”文学作品”,20,Book("《阳关》”,80),Book(”《围城》”,30)))

//使用case语句,得到“漫画”

valres = sale match

//如果我们进行对象匹配时,不想接受某些值,则使用。忽略即可,*表示所有case Bundle(__,Book(_),_*)=> desc

println("res="+ res)//

2.知识点二:通过@表示法直接将嵌套的值绑定到变量上。

绑定到剩余 item 到 rest

请思考:如何将“漫画”和

val sale = bundle(书籍,10,book(“漫画“,40),bundle(“文学作品”,20,book(”《阳关》”,80),book(”《围城》”,30)))

这个嵌套结构中的”漫画和“bundle(“文学作品”,20,book(”《阳关》”,80),book(”《围城》”,30)))”绑定到变量,即赋值到变量中,

vel result2 = sale match{

case bundle(_,_,art@book(_,_),rest@_*)=>(art,rest)

}

printin(result2)

printin(”art =”+result2._1)

printin(”rest=”+result2._2)

如果需要返回一整个变量名称,在前面取一个变量名称+@,art@book(_,_)表示将匹配到的对象交给art,后面所有的对象交给res。

然后将其整理成元组的形式返回,慢慢出现了递归的概念。

//知识点2-通过@表示法将嵌套的值绑定到变量。 *绑定剩余Item到rest

val res2 = sale match  {

//如果我们进行对象匹配时,不想接受某些值,则使用。忽略即可, 表示所有

case Bundle(__,art @ Book(__), rest @ 米 =>(art, rest)

}

println("res="+ res)

}

}

执行结果如下:

D:\program\jdk8\bin\java.

res=漫画

res2=(Book(漫画,40l0),WrappedArray(Bundle(文学作品,20.0,WrappedArray(Book(《阳关》,80.0),Book(《围城》,30.0)))))

process finished with exit code 0

3.知识点三:不适用_*绑定剩余的item到rest

如果只想绑定一个bundle,则把*去掉。

请思考:如何将“漫画”和bundle(“文学作品”,20,book(”《阳关》”,80),book(”《围城》”,30)))部分

val sale = bundle(书籍,10,book(“漫画“,40),bundle(“文学作品”,20,book(”《阳关》”,80),book(”《围城》”,30)))

这个嵌套结构中的”漫画和bundle(“文学作品”,20,book(”《阳关》”,80),book(”《围城》”,30)))绑定到变量,即赋值到变量中

vel result2 = sale match{

//说明因为没有使用_*即明确说明没有多个bundle,所以返回的rest,就不是wrappedarray了

case bundle(_,_,art@book(_,_),rest@_*)=>(art,rest)

}

printin(result2)

printin(”art =”+result2._1)

printin(”rest=”+result2._2)

根据上述知识点设计如下语句

//知识点3-不使用_*绑定剩余 Item 到 rest

Val res3 = sale match

//如果我们进行对象匹配时,不想接受某些值,则使用。忽略即可, -*表示所有

case Bundle(_, _,art3@ Book(_,_),rest3)=>(art3, rest3)

}

println("res3="+ res3)

}

}

//设计样例类

abstract class Item // 项case class Book(description: String, price: Double) extends Itemcase class Food(description: string, price: Double) extends Item

//Bundle捆, discount:Double 折扣, item: Item*case class Bundle(description: String, discount: Double,item:Item*) extends Item

执行结果如图所示:

D:programGak8 bin java…

res=漫画

res2=(Book(漫画,40.0),WrappedArray(Bundle(文学作品,20.0,WrappedArray(Book(《阳关》,80.0),Book(《围城》,30.0)))))

Process finished with exit code 0


三、总结

讲述了匹配嵌套结构,首先提出了一个需求,基本介绍了一下该结构,提出完成该案例的具体要求。

基本介绍

操作原理类似于正则表达式

最佳实践案例-商品捆绑打折出售

现在有一些商品,请使用Scala设计相关的样例类,完成商品捆绑打折出售。要求

1)商品捆绑可以是单个商品,也可以是多个商品。

2)打折时按照折扣x元进行设计.

3)能够统计出所有捆绑商品打折后的最终价格

接下里一步步分析:

第一步:创建样例类

第二步:匹配嵌套结构,给出了一个具体案例。

第三步:为了更好的理解案例,补充了三个知识点。

(1)将 descr 绑定到第一个 book 的描述

(2)知识点二:通过@表示法直接将嵌套的值绑定到变量上。

(3)知识点三:不适用_*绑定剩余的 item 到 rest

第四步:提出了解决方案。

相关文章
|
存储 缓存 算法
RAM与ROM的区别及应用
RAM与ROM的区别及应用
|
安全 开发工具 Android开发
安卓与iOS系统的优缺点比较
【2月更文挑战第6天】 安卓和iOS是目前市场上最流行的两种操作系统。虽然它们都拥有自己的独特之处,但它们也有一些共同之处。本文将探讨这两种操作系统的优缺点,并对它们进行比较。
818 5
|
存储 Linux KVM
|
消息中间件 缓存 网络协议
RabbitMQ消息确认
RabbitMQ消息确认
427 0
|
2天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
253 116
|
17天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
11天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
650 220