相关疑难解决方法(0)

键入安全方法链接,不允许重复操作

我想在这些问题中实现方法链接:

实现支持方法链的Scala特征的最佳实践 ;

Scala DSL:使用无参数方法链接的方法

但是,我希望一旦使用了"属性",它就不能再使用了.例如,假设我有一个类"Myclass",我想允许使用定义"foo"和定义"bar"最多一次,我不关心最终的返回类型.从而:

val c = new Myclass
c foo //ok !
c foo bar // ok!
c foo foo // refuse to compile
c foo bar foo //refuse to compile
Run Code Online (Sandbox Code Playgroud)

我在这个问题上挣扎了一段时间,我的视力开始变得模糊!我尝试使用隐式类,但是,他们是否需要解析没有使用关联属性的对象,我无法找到他们是否需要通过从对象可用属性中删除它来"使用"该属性,以及再说一次,我怎么也找不到.

我目前正在使用反射API进行搜索,但对我来说它仍然有点模糊.

帮助将不胜感激!=)

scala method-chaining

6
推荐指数
1
解决办法
389
查看次数

Scala:使用稍后创建的实例初始化字段

假设我有这两个类:

class Person (val name: String, val surname: String)

class Family (val nameFamily: String, val members: Set[Person])
Run Code Online (Sandbox Code Playgroud)

现在在main方法中实例化两个类,如下所示:

val F1 = new Family ("Red", Set(P1, P2))
val P1 = new Person ("John", "Smith")
val P2 = new Person ("Luis", "Smith")
Run Code Online (Sandbox Code Playgroud)

主要方法允许我在实例化之前输入家庭成员.我希望这是我的模特.但如果我在成员之前进入成员,那么当我去写作:

println(F1.members)
Run Code Online (Sandbox Code Playgroud)

我返回一个Set(null).

如果你先写下主要人物,就像这样:

val P1 = new Person ("John", "Smith")
val P2 = new Person ("Luis", "Smith")  
val F1 = new Family ("Red", Set(P1, P2))
Run Code Online (Sandbox Code Playgroud)

我没有问题.

但是我想以任何顺序编写实例,最后运行一个家庭验证.

我可以解决这个问题.我的意思是,我可以使用稍后创建的实例初始化我的字段.

对不起英文翻译不好.

上传#1

我在Scala中实现了一个域,我使用DSL创建了域的实例.我的DSL允许我以混合顺序实例化类.例如,我创建一个Component,然后向该Component添加一些Type.然后我创建我添加到Component的Type.在主要方法中我可以做到.作为主要的最后一个陈述,我把验证.在开始验证时,键入组件没有找到任何内容,因为这些将在以后实例化.这个问题只能在主要用懒惰解决?或者是域级别的解决方案.

scala field initialization

2
推荐指数
1
解决办法
1956
查看次数

标签 统计

scala ×2

field ×1

initialization ×1

method-chaining ×1