在scala中键入别名以在单独的软件包中使用

问题描述

我有两个文件,Vec3.scalaMain.scala。在Vec3.scala中,我定义了Vec3案例类,该案例类实现了各种不错的运算符,如+unary_-,点积等。由于我将在正在处理的项目中同时使用颜色和点,因此我的C ++本能希望我像这样Vec3Color键入别名Point3// Vec3.scala package vec3 final case class Vec3(x: Float,y: Float,z: Float) { ...math functions... } type Color = Vec3 type Point3 = Vec3

sbt

但是,当我尝试使用expected class or object definition type Color = Vec3 ^ 进行编译时,出现了一些我所期望的错误:

Color

我认为这是因为这些类型别名不驻留在类或对象中,但是我不希望它们存在,因为我更希望Point3Vec3具有相同的易用性用作vec3本身。如果我使用的是C ++,则只需将这些定义放在头文件中,然后每天称呼它,可惜。有没有一种方法可以在Scala中做到这一点,而无需让我的 ManagementObjectSearcher NetworkSearcher = new ManagementObjectSearcher("SELECT IPAddress,MacAddress,Description FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'TRUE'"); var rx = new Regex(@"\b\d{1,3}\.\d{1,3}\b"); foreach (ManagementObject prop in NetworkSearcher.Get()) { if (rx.IsMatch(((String[])prop["IPAddress"])[0])) { ipaddress.Add(String.Format("{0}\t{1}\t\t{2}",((String[])prop["IPAddress"])[0],prop["MacAddress"],prop["Description"] )); } } 软件包的用户每次在文件中使用它们时都自己使这些类型别名呢?还是有一些漂亮的Scala演技以不同的方式解决了这个问题?

解决方法

类型别名不能存在于scala 2中的类,特征或对象之外。请改为在package object中定义它们。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...