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

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

开发者学堂课程【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

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

相关文章
|
8月前
|
消息中间件 供应链 NoSQL
电商订单待支付(思路分析)
电商订单待支付(思路分析)
【Leetcode -1475.商品折扣后的最终价格 -1544.整理字符串】
【Leetcode -1475.商品折扣后的最终价格 -1544.整理字符串】
48 0
|
存储 JSON API
如何教会小白使用API接口获取商品数据
在当今的数字化时代,API接口已经成为数据获取的重要通道。API,全称应用程序接口,是一种预定义的软件组件,用于提供特定的功能或数据。通过使用API接口,我们可以轻松地从各种数据源获取信息,包括商品数据。本文将指导小白如何使用API接口获取商品数据,从申请API接口、使用API接口到实际应用,一一讲解。
|
数据可视化 关系型数据库 数据库
课时1:实现淘宝母婴订单实时查询和可视化
课时1:实现淘宝母婴订单实时查询和可视化
|
机器学习/深度学习 传感器 安全
2023 年高教社杯C题蔬菜类商品的自动定价与补货决策思路及代码(持续更新)
2023 年高教社杯C题蔬菜类商品的自动定价与补货决策思路及代码(持续更新)
|
算法 Python
算法创作|模拟商品加入购物车并结算价钱问题解决方法
算法创作|模拟商品加入购物车并结算价钱问题解决方法
116 0
算法创作|模拟商品加入购物车并结算价钱问题解决方法
|
数据挖掘 API
淘宝商品数据分析怎么操作?从哪些方面下手?
淘宝商品数据分析怎么操作?从哪些方面下手?
|
C语言 数据安全/隐私保护
用C语言写一个商品购物收银台系统,统计购买商品总价
要制作一个“系统”,就得先把一个个小功能逐一实现,然后将其整合,我们用C语言只需把它们写成一个个函数即可,直接进入正题,我们列出今天所需的头文件,一共五个。
|
SQL BI Shell
报表统计_广告投放统计_代码实现 | 学习笔记
快速学习报表统计_广告投放统计_代码实现
113 0
报表统计_广告投放统计_代码实现 | 学习笔记
|
开发者 微服务
课程支付功能需求分析 | 学习笔记
简介:快速学习课程支付功能需求分析
100 0
课程支付功能需求分析 | 学习笔记