我发现自己写了很多这样的代码:
thing match {
case Case1 ...
case Case2 ...
case _ => throw new IllegalStateException(s"unexpected $thing")
}
Run Code Online (Sandbox Code Playgroud)
有时,当案例不匹配时,我想要一个运行时错误。案例是一种形式的断言。
有没有更好的方法来抑制穷举检查?
我不想使用,[@unchecked](https://www.scala-lang.org/api/2.12.1/scala/unchecked.html)因为这也会禁用可达性检查,这是我想要的。
两个问候方法都一样
object test {
def greet = { println("hi")} //> greet: => Unit
def greet1(f: => Unit)= {println("hi")} //> greet1: (f: => Unit)Unit
}
Run Code Online (Sandbox Code Playgroud)
根据我的理解greet是一个函数,它不接受任何参数并返回Unit和参数按名称调用.而greet1是需要函数返回单位,也可以通过名字为它的参数调用的函数.很困惑,任何人都可以善解释这种差异.
我从NetLogo导出了一个景观.我在Netlogo中导入了相同的格局.从这个角度来看,我添加了另一个特定于补丁"驻留时间"的全局变量:
globals [
list-of-polygons ]
patches-own [
area-ha
residency-time
]
Run Code Online (Sandbox Code Playgroud)
我创建了一个函数来为我的横向中的每个多边形指定驻留时间值
to assign-residency-times
set list-of-polygons ([ID-polygon] of patches)
set list-of-polygons remove-duplicates list-of-polygons
set list-of-polygons remove 0 list-of-polygons
print sort list-of-polygons
foreach list-of-polygons [
ask patches with [ ID-polygon = ? ] [
if all? patches [pcolor = green] [
set residency-time exp(1.02 * area-ha) ]
.... ] ]
Run Code Online (Sandbox Code Playgroud)
我不明白为什么我有这个错误信息:Nothing named area-ha has been defined.但是,我定义了area-hadans patches-own.另外,当我检查补丁时,补丁特有的所有全局变量都消失了(见下图)!

在此先感谢您的帮助.
假设我要输出的方法的东西,在这种情况下,字符串或整数.我可以这样做:
def outString(str: String) {
str // or "return str"
}
Run Code Online (Sandbox Code Playgroud)
并像这样运行: outString("foo")
但我也可以避免将特定类型初始化为参数,它会起作用:
def outString(str: Any) {
str
}
Run Code Online (Sandbox Code Playgroud)
并运行它像这样:outString("foo")或outString(123).
鉴于它们都工作并假设你并不总是知道所传递的Any参数的类型,使用特定参数类型是否有任何陷阱?是否Any做检查类似解释的语言也将减缓对代码进行任何类型的自动型的?
文档说,coursier 是 scala 的一个新的工件管理器。但是 Coursier 和 maven、sbt 和 gradle 等构建工具有什么区别呢?为什么我需要+1包含 jar 文件的文件夹?我已经有.m2Maven 存储库、.gradleGradle 和.sbtsbt。所以我构建了一些项目,现在我有了AppData/Local/Coursier“相同”的 jar 文件。有人可以解释一下项目的目标是什么吗Coursier?