Scala 中的“def”、“val”和“lazy val”评估

2023-12-02

我的理解正确吗

  • def每次访问时都会对其进行评估

  • lazy val一旦被访问就会被评估

  • val一旦进入执行范围就被评估?


是的,但有一个很好的技巧:如果您有惰性值,并且在第一次评估期间它将出现异常,下次您尝试访问它时将尝试重新评估自身。

这是示例:

scala> import io.Source
import io.Source

scala> class Test {
     | lazy val foo = Source.fromFile("./bar.txt").getLines
     | }
defined class Test

scala> val baz = new Test
baz: Test = Test@ea5d87

//right now there is no bar.txt

scala> baz.foo
java.io.FileNotFoundException: ./bar.txt (No such file or directory)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:137)
...

// now I've created empty file named bar.txt
// class instance is the same

scala> baz.foo
res2: Iterator[String] = empty iterator
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Scala 中的“def”、“val”和“lazy val”评估 的相关文章

随机推荐

  • xhr send - 发送文件和 CSRF 令牌

    我正在尝试使用 XMLHttpRequest 将文件对象和字符串 CSRF 令牌 发送到服务器 但我似乎无法弄清楚如何添加令牌 xhr open POST form action true xhr setRequestHeader X FI
  • 修改构建的 Jenkins 描述

    我想remotely更改 Jenkins 构建描述 我的脚本已全部准备就绪 除了一个小问题 多行描述 我在 Jenkins 中使用 REST API 和 JSON 来下载旧的描述 old description curl s user US
  • 我的 Webview 应用程序在聊天时不断崩溃

    除了信使之外 一切都按其应有的方式运行 代码 if url startsWith www messenger com Intent intent new Intent Intent ACTION VIEW Uri parse url sta
  • VBA:如何打开文件夹中最近的两个Excel文件

    我试图打开文件夹中最新的两个 Excel 文件 到目前为止 我确实打开了文件夹中的最新文件 但我必须打开文件夹中的第二个最新文件 参考下面的代码 请建议如何打开第二个最近的文件 Sub findingdiff Dim FileSys obj
  • 如何使用php脚本下载视频

    在我的程序中 我想添加一个下载选项来下载当前的流媒体视频 我尝试了这段代码 psp Tom 20 amp 20Jerry 20race 1 flv header Content type application octet stream h
  • 矩阵乘法问题 - Numpy 与 Matlab?

    我正在尝试将一些 Matlab 代码翻译成 Python 使用 numpy 我有以下 Matlab 代码 1 x eye 2 X就是1000000 据我了解 Matlab中的 表示矩阵乘法 相当于numpy中的 dot 所以在Python中
  • del 语句会打开内存吗?

    我写了一个 python 脚本 可以在晚上睡觉时备份我的文件 该程序设计为在计算机打开时运行 并在备份完成后自动关闭计算机 我的代码如下所示 from datetime import datetime from os import syst
  • MKPinAnnotationView 颜色不起作用

    我试图显示阵列中的一些引脚 它显示了所有引脚 但它们是红色的 而不是我要求的绿色 这是为什么 run on array to get all locations for int k 0 k lt array count k k 2 floa
  • 如何从listView中删除项目?

    我从 Listview 中的 SQLite 获取数据 当用户单击检查时 我需要删除此项框并按删除按钮或仅单击复选框 我不明白该怎么做 这是我的示例代码供参考 MyTable java public class MyTable extends
  • 如何获取嵌入资源的路径?

    我在我的 C 项目中包含了一个嵌入式资源 我知道它的名字以及如何引用它 所以我想知道是否有任何方法可以获得它的绝对路径 有吗 嵌入式资源正是 嵌入式 这意味着 它包含在程序集中 并且在编译后不作为物理文件存在 如果这就是您要查找的内容
  • 错误:(1) 处名称中的字符无效

    我正在尝试编译一个 Fortran 文件以及 FORTRAN 中的一些 h 文件 h 文件包含公共变量块的定义 当我用 Fortran 编译它们时 出现以下错误 integer knue ke knumu kmu knutau ktau k
  • 如何批量更新实体框架中的记录?

    我正在尝试使用实体框架批量更新记录 我尝试过 Entity Framework ExtensionsUpdate method The Update方法能够批量更新具有相同更新值集的一组记录 Example Id Quantity Reco
  • ASP.NET Core 和 EF Core 1.1 - 使用存储过程显示数据

    我的查询有问题 我想在视图上显示结果 HttpGet ValidateAntiForgeryToken public async Task
  • 尝试在 ASP.NET Core MVC 中使用 /me/memberOf 时,Microsoft Graph Api 返回禁止响应

    这是我所拥有的 Api版本为v1 0 private async Task
  • 生命周期管理规则不适用于 ADLS Gen2 存储帐户

    我是使用 Azure 及其技术堆栈的新手 如果我在这里没有使用正确的术语 我深表歉意 我是 Azure 门户上相应工作区和存储帐户的管理员 我设置了一条规则 从我的测试 块 类型 blob 容器 存档目录中硬删除文件 以删除超过 1 天的文
  • 使用Eclipse配置Android SDK的严重问题

    我在使用 Eclipse 配置 ADT 时遇到严重问题 我使用的是 Windows 7 家庭高级版 我使用的 Eclipse 64 位 是 Eclipse Classic 3 7 1 Eclipse Java EE IDE for Web
  • C 中未读取整个文件(EOF 意外发生)

    我正在尝试打印大约 4000 个字符的文件内容 不知何故 程序仅记录前 220 个字符并终止 int main void char ch file name 25 payload 3904 FILE fp printf Enter the
  • 平滑 JavaScript/jQuery 滚动到元素

    我正在尝试制作一个水平滚动的网站 但我不知道如何做smoothly从一个元素滚动到另一个元素 我尝试了以下代码 a href top click function body animate scrollTop 0 slow return f
  • 在 MySQL 的存储过程中写入可选参数? [复制]

    这个问题在这里已经有答案了 我想创建一个存储过程 它根据传递给它的参数更新表中的所有字段或仅更新其中的几个字段 如何创建接受可选参数的存储过程 Optional ParametersMySQL 尚不支持 我建议你通过null您的参数和存储过
  • Scala 中的“def”、“val”和“lazy val”评估

    我的理解正确吗 def每次访问时都会对其进行评估 lazy val一旦被访问就会被评估 val一旦进入执行范围就被评估 是的 但有一个很好的技巧 如果您有惰性值 并且在第一次评估期间它将出现异常 下次您尝试访问它时将尝试重新评估自身 这是示