我有一个项目,它是 API 的代码。在build.sbtScala的版本中是:
scalaVersion := "2.13.8"
Run Code Online (Sandbox Code Playgroud)
在几个 Scala 文件中,我看到导入使用*而不是像_这样:
...
import sttp.tapir.*
...
Run Code Online (Sandbox Code Playgroud)
那个怎么样?据我了解,*可以在 Scala 3 中使用,但不能在 2.1x 中使用...我看不到任何库(它是一个很大的代码库)或与此相关的东西...为什么它可以工作而不是显示编译错误?
我一直试图理解“compile->compile;test->test”的用途,但是在阅读 sbt 页面后我仍然不明白它......
假设我在 build.sbt 中有这个
lazy val `api` = project.dependsOn(`domain` % "compile->compile;test->test")
...
lazy val `domain` = project...
Run Code Online (Sandbox Code Playgroud)
如果我删除“compile->compile;test->test”有什么区别
lazy val `api` = project.dependsOn(`domain`)
...
lazy val `domain` = project...
Run Code Online (Sandbox Code Playgroud)
如果我只输入“测试->测试”怎么办?或者“编译->编译”?
我希望这个答案不会重复,我尝试搜索,我认为以前没有人问过这个问题。
从Scala文档中我可以读到(https://docs.scala-lang.org/overviews/scala-book/case-classes.html ):
...
`equals` and `hashCode` methods are generated, which let you compare objects and easily use them as keys in maps.
...
Run Code Online (Sandbox Code Playgroud)
所以我有这个代码:
class Person_Regular(name: String)
case class Person_CC(name: String)
Run Code Online (Sandbox Code Playgroud)
如果我打印以下结果hashCode():
println(Person_CC("a").hashCode())
Run Code Online (Sandbox Code Playgroud)
我可以在控制台中看到:
-1531820949
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为案例类hashCode默认包含该方法。普通班怎么样?
这段代码:
println((new Person_Regular("Joe")).hashCode())
Run Code Online (Sandbox Code Playgroud)
还打印哈希码:
1018937824
Run Code Online (Sandbox Code Playgroud)
那么定义class方法时hashCode也会自动生成吗?那么为什么 Scala 文档说它hashCode是用 case 类生成的,而常规类已经这样做了呢?
我见过很多次这样的代码:
...
val aString: String = someFunctionDataReturnsAString()
...
if (someCondition) Some(aString)
else
...
Run Code Online (Sandbox Code Playgroud)
创建新的Optionusing是否正确Some(aString)?aString如果由于某种原因结果is的值怎么办null?if将句子替换为:不太好
if (someCondition) Option(aString)
Run Code Online (Sandbox Code Playgroud)
因为:
val a = Some("hello")
val b: String = null
val c = Some(b)
val d = Option(b)
println(a)
println(c)
println(d)
Run Code Online (Sandbox Code Playgroud)
将在控制台打印:
Some(hello)
Some(null)
None
Run Code Online (Sandbox Code Playgroud)
Option当传递字符串作为参数时,看起来是一个更好的主意,所以如果字符串是will benull的值。OptionNone
我已经看到要审查的代码,我认为对于这样的情况,应该添加一条注释,要求替换Some(aString)为Option(aString).