隐式参数的有效用法

2023-12-19

下列example http://www.scala-lang.org/node/114 from 斯卡拉之旅显示如何使用隐式根据类型提供适当的缺失成员(add 和 unit)。编译器将在范围内选择正确的隐式对象。该库还使用它List.sortBy and Ordering or List.sum and Numeric例如。

然而,B 类中的以下用法是隐式参数的有效/推荐用法(而不是在 A 类中不使用隐式参数):

class I

class A {
  def foo(i:I) { bar(i) }
  def bar(i:I) { baz(i) }
  def baz(i:I) { println("A baz " + i) }
}
(new A).foo(new I)

class B {
  def foo(implicit i:I) { bar }
  def bar(implicit i:I) { baz }
  def baz(implicit i:I) { println("B baz " + i) }
}
(new B).foo(new I)

当沿着堆栈传递参数时,我主要使用隐式来节省调用站点的一些输入。


这是一个非常好的用例。实际上,当范围决定要使用的参数时,我建议这样做。它提供了一种优雅的方式将某种上下文传递到插件类中,以便实用程序函数可以使用该上下文。例如:

trait Context

object UtilityLib {
  def performHandyFunction(implicit x : Context) : SomeResult = ...
}

trait Plugin {
   def doYourThing(implicit ctx : Context) : Unit
}

class MyPlugin extends Plugin {
  def doYourThing(implicit ctx : Context) : Unit = {
    UtilityLib.performHandyFunction
  }
}

SomePluginAPI.register(new MyPlugin)

你可以看到一个例子我正在玩的数据库迁移系统 http://suereth.blogspot.com/2008/11/using-partial-functions-and-pattern.html。查看 Migration 类及其 MigrationContext。

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

隐式参数的有效用法 的相关文章

  • 为什么Scala语言中的++:运算符这么奇怪?

    我正在使用 运算符来获取两个集合的集合 但是我使用这两种方法得到的结果不一致 scala gt var r Array 1 2 r Array Int Array 1 2 scala gt r Array 3 scala gt r res2
  • 我在 Scala 中将资源放在哪里?

    在学习使用 Scala 和 JavaFX 时 我在 a 中遇到了以下代码ProScalaFX 示例 https github com jpsacha ProScalaFX val resource getClass getResource
  • 副作用是纯函数中找不到的一切吗?

    可以肯定地说 以下二分法成立 每个给定的函数是 要么纯粹 或有副作用 如果是这样 函数的 副作用就是纯函数中找不到的任何东西 这很大程度上取决于您选择的定义 可以公平地说 函数是pure or impure 纯函数始终返回相同的结果并且不会
  • Spark - Scala - 用另一个数据帧中的查找值替换数据帧中的值

    我正在 Databricks 上使用 Spark 编程语言是Scala 我有两个数据框 主要数据框 见截图 1 https i stack imgur com EShir png 查找数据框 见截图3 https i stack imgur
  • 简单的 Scala actor 问题

    我确信这是一个非常简单的问题 但很不好意思地说我无法理解它 我有一个 Scala 值列表 我想使用演员来并行地对每个值进行一些 外部 调用 我想等到所有值都已处理完毕 然后继续 没有共享值被修改 有人可以建议吗 Thanks Scala 中
  • scala.collection.breakOut 与视图

    这个答案 https stackoverflow com a 1716558 936869描述如何scala collection breakOut可用于防止创建浪费的中间集合 例如 这里我们创建一个中间体Seq String String
  • Liftweb 环境中的后台任务

    我必须编写守护进程 并且我想使用模型来连接到数据库和一些有用的 Lift 类 是否可以运行 Rails 的 rake 任务的模拟 Scala 社区组上也有类似的问题 答案是使用Actors来做后台处理
  • 如何检查字符串中是否包含某个字符?

    我想检查字符串是否包含该字符 我正在编写一个刽子手代码 例如 下面是要猜测的单词 scala 但看起来像 至用户 假设用户输入字母 a 那么它一定看起来像 a a def checkGuess if result contains user
  • Scala:如何编写将类型化为接收者的实现类型的对象返回的方法

    我知道 Scala 中不推荐使用案例类继承 但为了简单起见 我在以下示例中使用了它 scala gt case class Foo val f String def foo g String Foo this copy f g define
  • Scala 集合不一致

    为什么 Scala Collections API 中的集合和列表之间缺乏一致性 例如 有不可变的 Set 但也有可变的 Set 如果我想使用后者 我可以简单地这样做 val set Set A set new A 但是 本身不存在可变列表
  • 将 Scala 库转换为 DLL (.NET)

    我正在尝试从 scala 类创建一个 Dll 我将 IntelliJ 与 SBT 一起使用 我已经找到了一种使用 ikvm converter 将 jar 文件转换为 Dll 的方法 现在的问题是 当我在 SBT 下使用 package 从
  • 了解 Scala 中的中缀方法调用和缺点运算符(::)

    我对 Scala 编程语言相当陌生 当我遵循以下网站的讲义时 我正在尝试一些萦绕在我脑海中的东西 here http horstmann com sjsu cs152 04 closures1 html 我想我无法真正理解 cons 运算符
  • 有没有办法捕获 Spark 中使用通配符读取的多个 parquet 文件的输入文件名?

    我使用 Spark 将多个 parquet 文件读取到单个 RDD 中 并使用标准通配符路径约定 换句话说 我正在做这样的事情 val myRdd spark read parquet s3 my bucket my folder parq
  • 通用特征的隐式转换

    我正在实现一个数据结构 并希望用户能够使用任何类型作为密钥 只要他提供一个合适的密钥类型来包装它 我有这个关键类型的特质 这个想法是进行从基类型到键类型的隐式转换 反之亦然 实际上 只使用基类型 该特征看起来像这样 trait Key T
  • 不支持的身份验证令牌,仅当禁用身份验证时才允许 schema='none':{ schema='none' } - Neo4j 身份验证错误

    我正在尝试使用 neo4j spark connector 从 Spark 连接到 Neo4j 当我尝试连接到 Neo4j 时遇到身份验证问题org neo4j driver v1 exceptions AuthenticationExce
  • 在 Scala 和 SBT 中调试较长的编译时间

    在我的 Scala SBT 项目中 我有一个文件需要 5 分钟才能编译 所有其他的都可以在几秒钟内编译 这使得开发非常痛苦 我确信我滥用了一些 Scala 构造 但我不知道如何调试它 如何在 Scala 中调试较长的编译时间 我正在使用 S
  • Play Framework 2.3 (Scala) 中的自定义 JSON 验证约束

    我设法使用自定义约束实现表单验证 但现在我想对 JSON 数据执行相同的操作 如何将自定义验证规则应用于 JSON 解析器 示例 客户端的 POST 请求包含用户名 username 我不仅要确保该参数是非空文本 而且还要确保该用户确实存在
  • Scala 和变量中的模式匹配

    我是 Scala 新手 有点想知道模式匹配是如何工作的 想象一下我有以下内容 case class Cls i Int case b Cls i gt Ok case e Cls gt Ok case f Cls gt Ok case s
  • 使用 scala 集合 - CanBuildFrom 麻烦

    我正在尝试编写一个接受任何类型集合的方法CC 并将其映射到一个新的集合 相同的集合类型但不同的元素类型 我正在挣扎 基本上我正在尝试实施map but 不在集合本身上 问题 我正在尝试实现一个带有签名的方法 它看起来有点像 def map
  • Scala 中的 Shapeless 结构编程:如何正确使用 SYB 实现?

    我想使用SYB http research microsoft com en us um people simonpj papers hmap 实施于无形图书馆 https github com milessabin shapeless编写

随机推荐

  • 和 ${param} 之间有什么区别

    在 struts 中 我注意到有两种不同的方式来访问变量 我很好奇它们之间有什么区别以及何时正确使用它们 例如 假设我们像这样设置变量高度
  • 如何将按钮的文本左对齐?

    现在我想用代码将按钮的文本左对齐 该怎么做 我编码如下 button titleLabel textAlignment UITextAlignmentLeft 但它不起作用 你必须使用contentVerticalAlignment and
  • .gitattributes:text=auto 是否仍然使用 core.autocrlf 来检测 EOL

    With a gitattributes entry text auto 签出文本文件时使用什么行分隔符 这文档 https git scm com docs gitattributes gitattributes Settostringv
  • Eclipse 高亮显示出现次数,右列标记颜色

    类似 但又不同这个问题 https stackoverflow com questions 671219 eclipse coloring what is the pref item for background color of all
  • 未找到内部存储上的 Android 文件

    我正在尝试在我的应用程序的 Android 内部存储空间中写入一个文件 经过多次尝试 终于用这个方法成功了在 Android 手机的内存中写入 读取文件 https stackoverflow com questions 9306155 w
  • 我是否需要关闭和/或处置通过OperationContext.Current.GetCallbackChannel 获取的回调通道?

    我正在使用 OperationContext Current GetCallbackChannel 获取调用 WCF 服务操作的客户端的通道 我是否需要担心关闭 处置这些回调通道 或者这是由框架处理的 好吧 我自己尝试了一下 结果发现 如果
  • JavaFx:使用列名称将 TableView 导出到 Excel

    我正在尝试导出tableView擅长使用阿帕奇兴趣点 http poi apache org 一切都很好 但我需要导出所有表而不仅仅是项目 我的意思是当我使用此代码时使用列名称 HSSFWorkbook workbook new HSSFW
  • 使用 vuejs 中的方法进行条件 @click

    这是我的 for 循环 li a href crumb name a li click methodName 不应在最后一次迭代中可用 我可以使用 index breadcrumbs length 1 检查最后一次迭代 使用 apply v
  • Caffe Sigmoid交叉熵损失层损失函数

    我正在查看Caffe的代码Sigmoid 交叉熵损失层 https github com BVLC caffe blob master src caffe layers sigmoid cross entropy loss layer cp
  • wkhtmltopdf 的字母间距太大

    我正在使用 wkhtmltopdf 将网页下载为 pdf 但是css属性letter spacing似乎不起作用 font size 20px letter spacing 0px font size 20px letter spacing
  • iOS - MKMapView 使用地址而不是纬度/经度进行位置注释

    我可以在我的MKMapView然而 通过使用纬度和经度 我需要使用位置的提要是使用街道地址而不是纬度和经度 例如 1234 西 1234 东 旧金山 CA 这会不会与CLLocationManager 以前有人尝试过吗 基于psoft的优秀
  • UILabel 文本作为 html 文本

    我被一个小问题困住了 我需要使用一个句子 其中前两个单词为粗体 后两个单词为斜体 喜欢 I am using an O目标C开发商 怎么做 这在 Objective C 中可能吗 对于 iOS7 你可以使用这个 NSString htmlS
  • BLOb:无法读取所有数据,但只有几kb

    我正在使用 BLOb 支持从 MySQl 插入和读取 JDBC 我可以做到这一点 但是当它读取时 它只有几kb 我不知道为什么 这是工作代码 import java sql import java io public class Inser
  • 基于大空白的扫描图像切片

    我打算将问题分开this https www tnpsc gov in Tentative Document RAGS 2022 opt pdfPDF 文档 挑战在于问题的间隔不是有序的 例如第一个问题占据一整页 第二个问题也占据一整页 第
  • 闪存和辅助功能

    作为一名 Web 开发人员 我从事的许多项目都属于政府的范畴 因此受到 508 无障碍法律的约束 有时还受到 W3C 无障碍指南的约束 在满足这些要求的同时 Flash 可以使用到什么程度 对于使用 javascript 口头禅是通过提供相
  • CreateWindow“编辑”键入的字符“不可见”?

    在研究了所有我能找到的正确语法之后CreateWindow Edit 打电话 我不得不认输 当我运行程序时 我在编辑框中得到的只是 隐形字符 当我打字时 光标向右移动 但我输入的字符却看不到 只有当我用鼠标选择框内容时 我才能看到文本 但一
  • 是否有更简单的方法在 C# 控制台应用程序中使用 Windows ctrl+v(粘贴)功能?

    我构建了一个带有命令解释器的控制台应用程序 为了让事情变得更容易 我需要添加对读取剪贴板的支持ctrl v被按下 当我按 ctrl v 时 我看到了符号 V在控制台中 所以我用剪贴板文本替换该字符 经过一番谷歌搜索后 我发现剪贴板可以通过
  • 从 django 模板获取序列化的 json 对象?

    我需要澄清一下 例如 如果我使用序列化对象进行视图 def sample request res name man encoded json dumps res return render to response sample exampl
  • 输入“CREATE TABLE”时没有可行的替代方案

    我无法使用以下命令添加 MySQL 连接器 curl i X POST H Accept application json H Content Type application json localhost 8083 connectors
  • 隐式参数的有效用法

    下列example http www scala lang org node 114 from 斯卡拉之旅显示如何使用隐式根据类型提供适当的缺失成员 add 和 unit 编译器将在范围内选择正确的隐式对象 该库还使用它List sortB