ts.*_*ts. 4 python scala properties dynamic getter-setter
是否有scala等效的python __getattr__ / __setattr__(以及其他__*__方法?).有些东西是内置的还是一些特征?
Deb*_*ski 11
对于您而言__getattr__,__setattr__您必须等到有更多洞察力的人描述新的Scala 2.10反射API.(当然:它永远不会直接翻译.它完全取决于你的用例.如果你只想要一个动态类,将来会有一个Dynamic特点;如果你只想要一点点,那么围绕模式匹配进行设计可能是一个明显的选择.)
__call__→ apply()//几乎完全相同的行为__metaclass__ //使用案例依赖:
class继承或traitmixins可能是有用的super(); 在Scala super()中始终在构造函数中调用.__repr__,__str__→toString()__eq__ → equals()__init__ //在类体中隐式调用__new__//不直接存在; 取决于用例早期初始化 __del__// 失踪__nonzero__ //不是真的,除了 implicit def toBool[MyType](a: MyType): Boolean = ...__len__⇝ length,size或容器中的任何约定__getitem__→ apply(i: IndexType)//容器是Scala中的函数__setitem__ → update(i: IndexType, v: ValueType)__delitem__//无需特殊处理; 集装箱公约__iter__→ foreach(block: ValueType => Unit)//带返回值:map,flatMap值得注意的是,apply和update有特殊 Scala的,就像他们的Python的同行.它们允许以下语法:
val x = collection(elem) // val x = collection.apply(elem)
collection(elem) = y // collection.update(elem, y)
Run Code Online (Sandbox Code Playgroud)
同样,就像Python __iter__允许语法一样(el for el in container) foreach,map并且可以说for (el <- container) yield el.
通常不需要特殊处理,因为我们可以直接定义它们:
__add__,, __sub__... //只是定义def + (arg: T)或def - (arg: T)这还包括比较运算符
__lt__,__ge__→ def <(other: T),def <=(other: T)然而,就像在Python中一样,编译器中有一些特殊情况可用于高级事物:
__radd__,, __rsub__... //右关联运算符; 约.def +: (arg: T)或def -: (arg: T)(附上:)__iadd__,, __isub__... //修改运算符:def += (arg: T),...__enter__,__exit__//在大多数情况下,函数参数实现了相同的目的另请参阅:Scala的"魔术"功能列表
| 归档时间: |
|
| 查看次数: |
926 次 |
| 最近记录: |