隐式参数的有效用法

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(使用前将#替换为@)

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

随机推荐

  • 和 ${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