Scala案例类可以排除setter,例如:
case class Foo (foo: String, bar: Integer)
Run Code Online (Sandbox Code Playgroud)
将封装一个命名的String和Integer,并使它们从外部保持不变.
或者,等效地,你可以在一个不常见的代码行中创建一个没有输入参数和getter的无体类吗?
摆弄演示类型边界的示例代码,我将下面的原始代码从使用 case 类更改为普通类,对于 class 的定义MyInt
,这是此代码段中唯一的类。
trait Similar {
def isSimilar(x: Any): Boolean
}
class MyInt(x: Int) extends Similar {
def isSimilar(m: Any): Boolean =
m.isInstanceOf[MyInt] &&
m.asInstanceOf[MyInt].x == x
}
object UpperBoundTest extends App {
def findSimilar[T <: Similar](e: T, xs: List[T]): Boolean =
if (xs.isEmpty) false
else if (e.isSimilar(xs.head)) true
else findSimilar[T](e, xs.tail)
val list: List[MyInt] = List(MyInt(1), MyInt(2), MyInt(3))
println(findSimilar[MyInt](MyInt(4), list))
println(findSimilar[MyInt](MyInt(2), list))
}
Run Code Online (Sandbox Code Playgroud)
不再编译
[error] 7: type mismatch;
[error] found : MyInt
[error] …
Run Code Online (Sandbox Code Playgroud) 我尝试将以下特征混合到我的类中,以享受类似于类型Boolean
行为的类似内容.
trait ReadyStates { // well, this is really used like an enumeration
class ReadyState
object Ready extends ReadyState
object NotReady extends ReadyState
}
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用,因为每个类混合了这个特性,创建了自己的对象.所以Ready
不能天真地比较Ready
在不同类的成员之间传递返回值时.
我如何获得一个自定义类型,它有自己的一组允许值,与布尔有相同true
,false
并且它们可以跨类无缝比较?
我看了一下枚举,当时它们看起来并不那么闪亮.
谢谢!
我查看了类型类场景的示例以及如何在scala中模仿这个Haskell-ish概念,例如http://danielwestheide.com/blog/2013/02/06/the-neophytes-guide-to-scala-part- 12-type-classes.html.我认为他们所涉及的内容太多,而且叙述性的负担超出了他们的预期.您能否使用类型类而不是继承和mixins为多态性提供权威的最小示例?
谢谢!
我尝试在sbt中导入JSON库,以便我的自定义sbt任务可以使用JSON api编写json文件.然而,似乎sbt无法导入这些库,而是它只能导入"标准"库,如scala.io.Source,java.io.File等...
两个注释掉下面的行都会失败sbt:
libraryDependencies += "com.typesafe.play" %% "play-json" % "2.3.7"
libraryDependencies += "io.argonaut" %% "argonaut" % "6.0.4"
compile in Compile <<= (compile in Compile) map { c =>
import scala.io.Source
//import play.api.libs.json.Json
//import argonaut._, Argonaut._
Run Code Online (Sandbox Code Playgroud)
可能是什么?我必须写一个插件来规避这个吗?
$ about
[info] This is sbt 0.13.6
[info] The current project is built against Scala 2.11.6
[info] Available Plugins: ...
[info] sbt, sbt plugins, and build definitions are using Scala 2.10.4
Run Code Online (Sandbox Code Playgroud)
当然我可以直接插入我的json裸手但我不知道它会是什么......
谢谢!
什么可能是将任何scala集合转换Option
为同一集合的最惯用的方式,而当集合为空时,选项将是原来的None
,否则只是一个Some
原始的?
哦,并且没有使scala创建整个集合的内存副本以进行简单的转换.
Option.apply
适合翻译null
为Option
类型None
,一个很好的遗留争用实用程序,但对寻求以下语义的惯用scala无用:
val some = Option(List(3,4,5))
val none = Option(List()) // seeking None, rather than Some(List()) here
Run Code Online (Sandbox Code Playgroud) submodule add
真的,和 和有什么区别submodule init
?或者更准确地说,您什么时候想只使用其中之一而不使用另一个?
通读一遍(除了 clojure 源代码),有点难以理解转换器如何避免使用中间集合,这应该使它们更加精简和高效。
一个相关的问题是,他们假设每个输入变换是否独立于它的其他元素应用于其输入的每个元素,如果转换器通过压缩输入变换来工作,则可能存在限制输入集合 ? 逐个元素。
他们是否检查其输入函数的代码以确定如何交织它们以产生正确的组合结果?
在这些方面,您能否详细说明 clojure 中的换能器如何在引擎盖下工作?
我有一段从 XML 构建句子的代码,如下所示。我想知道什么可能是替代代码,在被黑客入侵后会更具可读性。
(mapcat
(fn [el]
(map special-join
(map
(fn [el] (map zip-xml/text (zip-xml/xml-> el :word)))
(zip-xml/xml-> el :sentence))))
(zip-xml/xml-> root :document))
Run Code Online (Sandbox Code Playgroud)
考虑到重复内联函数定义与嵌套探测相结合,上面的代码不是很易读,但是像在这个官方教程中那样将它们分解成独立的函数对于这种简单的情况对我来说真的没有意义。
为了完整起见,这是解析的重复 XML 结构
<document>
<sentence id="1">
<word id="1.1">Foo</w>
<word id="1.2">bar</w>
</sentence>
</document>
Run Code Online (Sandbox Code Playgroud) 我正进入(状态:
KilledWorker: ("('from_pandas-1445321946b8a22fc0ada720fb002544', 4)", 'tcp://127.0.0.1:45940')
我已经阅读了关于后一个错误消息的解释,但这与堆栈跟踪顶部的错误消息一起出现令人困惑:
distributed.utils - 错误 - Worker 已经存在 tcp://127.0.0.1:35780
实际错误通过管道传输到Jupyter notebook
为我的笔记本运行命令的终端:
ModuleNotFoundError:没有名为“_cython_magic_faba6120a194ab58ae9efd1da474433f”的模块
所以我将自己研究如何解决这个问题,现在我在我的案例中发现了详细的错误。关于这种特殊配置的精确提示会很好,但我想将所有 cython 代码提取到笔记本外部的 python 代码中更明智,而不是敲击了解 cython 魔术命令?
我目前使用 Akka actor 建立一个以线程安全方式原子执行的代码块(Akka 邮箱语义通过一次处理一条消息来强加原子性)。
然而,这引入了对参与者系统的需求,以及额外的副作用或膨胀(必须手动将异常传播给调用者,失去类型安全性ask
,并且通常使用消息语义而不是函数调用)。
是否可以在scala中以更简单的方式完成线程安全的原子代码块?你会应用@volatile
到一个函数吗?