作业评讲|学习笔记

简介: 快速学习作业评讲。

开发者学堂课程【Scala 核心编程-基础:作业点评】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/609/detail/8896


作业评讲

 

目录

一、做作业的目的

二、作业讲解

 

一、做作业的目的

学习任何一个技术,如果不去做作业,那这个技术肯定是驾驭不了的,所以练习是非常重要的。题做多了自然看到这个题目就反应过来该怎么做。

 

二、作业讲解

1、在 Scala REPL(read->evaluateion->print->loop)中,计算3的平方根,然后再对该值求平方。现在,这个结果与3相差多少?

提示: scala.math 找相应的方法

Math 是数学的意思,这里面提供了大量相关数学的一些方法,比如求平方或者平方根等。

打开 Scala Standard Library 2.11.8手册,输入 math,看到这里面有一个 scala.math 包,点击进去,然后,按 ctrl+f 键,输入 sqrt,找到对应方法,

 图片13.png

返回 double value 的平方根。要的就是它。

其实这是一个包对象里面包含的方法。

打开 REPL 运行窗口编辑:

scala〉 scala.math.sqrt(3)

res0: Double = 1.7320508075688772

scala〉 res0 * res0

res1: Double = 2.999999999999996

scala> 3 - res1

res2: Double = 4.440892098500626E-16

scala>

回车看到对应结果。

scala.math.sqrt(3)是计算3的平方根。默认分配一个变量 res0来接收3的平方根的值。再求平方后,看到结果有精度的损失。

2、Scala 语言的 sdk 是什么?

SDK 主要是明确一个概念,开发工具包。

3、Scala 环境变量配置及其作用。

配一个 Scala_home,然后再配一个 pass

4、Scala 程序的编写、编译、运行步骤是什么?能否一步执行?

5、Scala 程序编写的规则。

需要注意的是:语句后面无需带分号,但是带上也不会错。

6、简述:在配置环境、编译、运行各个步骤中常见的错误

7、如何检测一个变量是 val 还是 var?

思路:定义一个 val 和 var 变量,然后通过赋值可以看出。Val 是不能再重新赋值的,var 是可以反复的赋值。例:

scala> val num1 = 10

num1: Int = 10

scala> nun1 = 20

Kconsole>:12: error: reassignment to val

Num = 20

scala> var num2 = 20

num2: Int = 20

scala> num2 = 40

nun2: Int = 40

scala>

可以看到,val 不可以重复赋值,会报错。var 可以重复赋值。

8、Scala 允许用数字去乘-个字符串,去 REPL 中试一下"crazy"*3。 这个操作做什么?在 Scaladoc 中如何找到这个操作?

去查手册,找一个字符串乘以三会得到什么结果?然后找到它的出处。

(1)在 REPL 中编辑计算

scala> "crazy"* 3

res3: String = crazycrazycrazy

scala>

"crazy"*3就是这个字符串乘以3,得三个同样的字符串。

(2)在 Scaladoc 中找 String

打开 Scala Standard Library 2.11.8手册,

① 作为一个程序员,肯定会条件反射去找 string,但是没有找到直接的 string。

图片12.png

图中可发现有两个非常可疑或者相似的WrappedSting就是包装StingWrappedSting 跟传统 String 很相似点击进去,往下看有没有类似的方法

图片11.png

在图中,Value Members 目录下就有 def *(n: Int): String,这就是乘法。Return the current string concatenated n times.

返回连接 n 次的当前字符串。

② 也可以从 StringOps 里找到这个方法。同样在 Value Members 目录下就可以找到 String 方法

9、10 max2的含义是什么? max 方法定义在哪个类中?

 (1)返回的值:

scala〉10 max 2

res4: Int = 10

scala> 10 max 90

res5: Int = 90

scala>

这里可以看出,10 max 2就是返回两个数中的最大值。

上面的写法也可以这样写10.max(2)。两种写法在 Scala 里面是通用的。

scala> 10.max(20)

res6:Int = 20

scala> 10.max(1)

res7: Int = 10

scala>

(2) 正常的思维可能是在 Int 这个类里找。打开 Scala Standard Library 2.11.8手册,搜 Int,点击进去,然后,按ctrl+f 键,输入 max,

图片10.png

就直接找到了。是 Int 类。同样在 RichInt 中也找到。

10、用 BigInt 计算2的1024次方

提示:在 BigInt 找相应的方法

根据提示先到 BigInt 找有没有相应的方法。打开 Scala Standard Library 2.11.8手册,搜 BigInt,在 scala.math里。点击进去,然后,按 ctrl+f 键,输入 pow,

图片9.png

可以看到 BigInt 相应的方法似 pow。

scala> val num3 = new BigInt(2)

:11: error: type mismatch;

found  : Int(2)

required: java.math.BigInteger

val num3 = new BigInt(2)

scala> val num3 = BigInt(2)

num3: scala.math.BigInt = 2

scala>scala> nun3.pow(1024)res8:scala.math.BigInt=179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216

scala>

输入 val num3 = new BigInt(2),回车会报错。val num3 = BigInt(2)这里没有 new,直接用类名构建实例,用的是BigInt 里的 apply 方法。用 num3调用 pow 方法,就出结果,很大的数。比较大的数可以用 BigInt。

另一种方式,可以简写为:scala> BigInt (2) pow(1024)  也是可行的。构建匿名的对象。然后用 pow 计算出结果。

前一种方式更好理解。

11、在 Scala 中如何获取字符串“Hello”的首字符和尾字符?

提示: 在String 中找相应的方法

打开 Scala Standard Library 2.11.8手册,搜 String,在 WrappedSting 里找。点击进去,按 ctrl+f 键输入 take,

图片8.png

看到 take 方法,这个方法就是选择前 n 个元素。

字符串的本质实际上是字符数组。由多个字符构成的一个数组。

例1:取首字符两种方法

scala> "hello".take(0)

res10: String = ""

scala> "hello".take(1)

res11: String = h

scala> "he11o"(0)

res12: Char = h

scala>

一般认为 hello 字符里的 h 是在下标0位,但 take(0)并不能取出 h,说明0不代表取出第一个字符。用 take(1)就能取出 h。

另一种方法,字符串 hello 是一个数组,直接使用"he11o"(0),也可以取出 h。这种方式比较传统,类似于 Java里下标0位代表第一个取出。

例2:

scala> "he11o".take ("he1lo".length)

res13 String = hello

length 这种方式从0到最后全部取出。不符合题意。

例3:

scala> "he11o".reverse

res14: String = olleh

Reverse 这种方式将整个字符串反转位置

例4:取尾字符方法1

scala> "he11o".reverse.take(1)

res15 : String = o

先用 Reverse 这种方式将整个字符串反转位置。然后再用 take(1)取出反转后的第一位。

例5:取尾字符方法2

Take 相当于从左边开始取。在编程语言里也会有从右边开始取的。

scala> "he11o".takeRight(1)

res16: String = o

takeRight 方式也能取出 o

相关文章
|
4天前
|
数据采集 人工智能 安全
|
13天前
|
云安全 监控 安全
|
5天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
1111 152
|
18天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1787 9
|
10天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
711 152
|
12天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
666 14
|
7天前
|
SQL 自然语言处理 调度
Agent Skills 的一次工程实践
**本文采用 Agent Skills 实现整体智能体**,开发框架采用 AgentScope,模型使用 **qwen3-max**。Agent Skills 是 Anthropic 新推出的一种有别于mcp server的一种开发方式,用于为 AI **引入可共享的专业技能**。经验封装到**可发现、可复用的能力单元**中,每个技能以文件夹形式存在,包含特定任务的指导性说明(SKILL.md 文件)、脚本代码和资源等 。大模型可以根据需要动态加载这些技能,从而扩展自身的功能。目前不少国内外的一些框架也开始支持此种的开发方式,详细介绍如下。
475 5