如何在Scala中导入没有路径依赖的内部类?
发布时间:2020-12-16 09:56:36 所属栏目:安全 来源:网络整理
导读:TL DR:是否可以(本地?)禁用路径依赖类型?我想发出一个类似于import x._的单一import语句,但要使C引用X#C而不是x.C(X是x的类型)? 我有一堆类型: class Button[M] { ... }class Label[M] { ... }... 我碰巧使用它们将相同类型的参数传递给所有这些: clas
TL& DR:是否可以(本地?)禁用路径依赖类型?我想发出一个类似于import x._的单一import语句,但要使C引用X#C而不是x.C(X是x的类型)?
我有一堆类型: class Button[M] { ... } class Label[M] { ... } ... 我碰巧使用它们将相同类型的参数传递给所有这些: class UseSite[M] ( btn1 : Button[M],btn2 : Button[M],lbl1 : Label[M]) { ... } 我认为包装所有这些类型是很好的,所以我只需要传递一次类型参数: class Swing[M] { class Button { ... } class Label { ...} } 然后在使用网站上我希望能够这样做: class WithSwing[M] { val swing = new Swing[M] import swing._ class UseSite( btn1 : Button,btn2 : Button,lbl1 : Label) { ... } } 但是,由于路径依赖类型,这不能正常工作:Button指的是swing.Button而不是Swing [M] #Button,因此外部代码很难将正确的参数传递给UseSite构造函数. 有没有一种很好的方法让Button引用Swing [M] #Button而不是swing.Button? 解决方法
假设路径依赖性确实是偶然的,那么你可以尝试这样的事情,而不是在代码库中追逐类型预测.
class Button[M] class Label[M] trait Swing[M] { type ButtonM = Button[M] type LabelM = Label[M] } class WithSwing[M] { val swing = new Swing[M] {} import swing._ class UseSite(btn1 : ButtonM,btn2 : ButtonM,lbl1 : LabelM) } 外面WithSwing使用看起来像, val ws = new WithSwing[String] import ws.swing._ new ws.UseSite(new ButtonM {},new ButtonM {},new LabelM {}) 继承在某种程度上增加了简洁性 class WithSwing[M] extends Swing[M] { class UseSite(btn1 : ButtonM,lbl1 : LabelM) } // Usage ... val ws = new WithSwing[String] import ws._ new ws.UseSite(new ButtonM {},new LabelM {}) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |