问题描述
我有两个文件,Vec3.scala
和Main.scala
。在Vec3.scala
中,我定义了Vec3
案例类,该案例类实现了各种不错的运算符,如+
,unary_-
,点积等。由于我将在正在处理的项目中同时使用颜色和点,因此我的C ++本能希望我像这样Vec3
和Color
键入别名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
我认为这是因为这些类型别名不驻留在类或对象中,但是我不希望它们存在,因为我更希望Point3
和Vec3
具有相同的易用性用作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中定义它们。