Scala 中的类型安全原语

2024-06-22

我希望在我的 Scala 代码中拥有类型安全的原语“子类”,而不会受到装箱性能的影响(对于延迟非常低的应用程序)。例如,这样的事情:

class Timestamp extends Long
class ProductId extends Long

def process(timestamp: Timestamp, productId: ProductId) {
  ...
}

val timestamp = 1: Timestamp // should not box
val productId = 1: ProductId // should not box

process(timestamp, productId) // should compile
process(productId, timestamp) // should NOT compile

有一个去年 Scala 用户邮件列表上的帖子 http://scala-programming-language.1934581.n4.nabble.com/typedef-like-like-syntax-for-strong-typing-keys-td1956375.html这似乎得出结论,如果没有装箱,这是不可能的,但我想知道现在在 Scala 2.8 中这是否可能。


为什么不使用类型别名呢?我知道它们并不完美(即它们不能解决您的编译问题),但它们可以使您的代码更清晰而不影响性能?

type Timestamp = Long
type ProductId = Long

然后你可以编写使用以下方法拉皮条我的图书馆模式并让 JVM 使用转义分析来消除运行时开销:

class RichTimestamp(self: Timestamp) {
  //whatever you want here
}

请注意,所有常见的警告都适用:除非您非常确定(例如,因为您正在进行超低延迟编程),否则使用盒装类型的性能影响可能不是问题。我每天处理的系统处理数千万个输入,没有任何问题!

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

Scala 中的类型安全原语 的相关文章

  • Scala 中并发混合的最佳实践.Map

    The ScalaDoc http www scala lang org api current index html scala collection mutable ConcurrentMap关于并发Map 是这样说的 已弃用 自版本
  • 获取有关 Groovy 函数的信息(名称、签名、主体代码)

    我有一个 Groovy 文件 其中包含一堆简单的函数 如下所示 useful functions def myFunc1 String arg println Hello arg def myFunc2 String arg println
  • Scala 中的类型安全原语

    我希望在我的 Scala 代码中拥有类型安全的原语 子类 而不会受到装箱性能的影响 对于延迟非常低的应用程序 例如 这样的事情 class Timestamp extends Long class ProductId extends Lon
  • 为什么scala不允许在trait中定义lazy val?

    我尝试用a来定义一个特质lazy val trait MyTrait lazy val something Int object SomeThing extends MyTrait override lazy val something I
  • Scala Vector 折叠语法(/: 和 :\ 和 /:\)

    有人可以提供一些例子来说明如何 and http www scala lang org archives downloads distrib files nightly docs library scala collection immut
  • 使用 Akka 将文件从服务器流式传输到客户端

    基本上我想允许用户从服务器下载 csv 文件 假设服务器上已存在 CSV 文件 API 端点通过 GET export 公开 如何将文件从 Akka HTTP 服务器流式传输到客户端 这就是我到目前为止所拥有的 Service def ex
  • Scala“对象”的继承

    我有这个Java代码 class Super public static void foo bar public static void bar out println BAR public static void main String
  • 生成 k 个成对独立的哈希函数

    我正在尝试实施一个计数最小草图 http en wikipedia org wiki Count Min sketchScala中的算法 所以我需要生成k个成对独立的哈希函数 这是一个比我以前编写过的任何东西都低的级别 除了算法类之外 我对
  • 作为单例集合的选项 - 现实生活中的用例

    标题几乎概括了这一点 Option作为单例集合有时会令人困惑 但有时它允许一个有趣的应用程序 我脑子里有一个例子 并且想了解更多这样的例子 我唯一的例子是运行for对的理解Option List T 我们可以执行以下操作 val v Som
  • 如何将Spark DataFrame插入Hive内表?

    以追加模式将 DF 插入 Hive 内部表的正确方法是什么 看来我们可以使用 saveAsTable 方法直接将 DF 写入 Hive 或将 DF 存储到临时表然后使用查询 df write mode append saveAsTable
  • 重载方法值与替代方法的聚合

    我有以下函数 但无法编译 private def save pea KStream String String Unit pea groupByKey aggregate gt folder String String value Stri
  • 抽象类型与类型参数

    在什么情况下抽象类型应该优先于类型参数 添加到我的之前关于抽象类型与参数的回答 https stackoverflow com questions 1154571 scala abstract types vs generics 11547
  • Scala Eclipse 自动完成功能损坏?

    我正在尝试让自动完成功能在 Eclipse 中用于 Scala 开发 我试图从 Scala 类引用 java 类 但自动完成功能从未找到它 例如 以这个 scala 类为例 object Main def main args Array S
  • mssql 的 UUID 疯狂

    我的数据库条目有一个 UUID 及其值 使用 Microsoft SQL Server Management Studio 提取 CDF86F27 AFF4 2E47 BABB 2F46B079E98B 将其加载到我的 Scala 应用程序
  • java.lang.RuntimeException:不支持的文字类型类org.joda.time.DateTime

    我在一个使用库的项目中工作 这对我来说非常新 尽管我在其他项目中使用它 没有任何问题 org joda time DateTime 所以我和Scala 并将项目作为作业运行数据块 scala版本 2 11 12 根据我到目前为止的调查 异常
  • Scala:折叠与折叠左

    我试图了解fold 和foldLeft 以及各自的reduce 和reduceLeft 如何工作 我使用 Fold 和 FoldLeft 作为示例 scala gt val r List ArrayBuffer 1 2 3 4 10 sca
  • IntelliJ、Akka 和配置文件

    使用时akka http akka io 我放置akka conf in src main resources 当我run通过 sbt akka conf被正确识别 但当我运行 IntelliJ 时却没有 即使在gen idea 实现这一目
  • Scala 中表达式和语句有什么区别

    我是 Scala 世界的新手 想知道表达式和语句之间有什么区别 以及为什么 if else 用于表达式 而不是语句 是否有办法在 if else 中使用语句 EDIT 正如 J rg W Mittag 在评论中指出的 这个答案实际上是错误的
  • 结构化流式自定义重复数据删除

    我有一个从 kafka 进入 dataFrame 的流数据 我想根据 Id 删除重复项并根据时间戳保留最新记录 样本数据是这样的 Id Name count timestamp 1 Vikas 20 2018 09 19T10 10 10
  • 如何使用 flex/bison 解析 Scala 语法中的新行?

    我想用flex和bison解析Scala语法 但我不知道如何解析 Scala 语法中的换行符 如果我将换行符解析为令牌T NL 这是Toy l例如 a zA Z a zA Z0 9 yylval gt literal strdup yy t

随机推荐