来自REPL:
scala> final val x = "x"
x: java.lang.String("x") = x
scala> @javax.persistence.Table(name = x) case class foo()
defined class foo
scala> final val x:java.lang.String = "x"
x: java.lang.String = x
scala> @javax.persistence.Table(name = x) case class foo
我听说在Scala中消除for循环并执行“Scala方式”是一个很好的实践。我甚至在找到了Scala样式检查器。在Scala中,for循环是不-不的吗?在的一个课程中,我找到了这个例子,这使我觉得for看起来是可以使用的,但是当然,在一行中使用Scala格式和语法,而不像传统的for在多行代码中看到的那样。参见我从Udemy课程中找到的示例:
val shipList = List("Enterprise", "Defiant", "Voyager", "Deep Space Nine")
for (ship <- ship
在Scala中,yield可以使用for -循环;例如:
val ints: IndexedSeq[Int] = for(i <- 1 to 10) yield i
但是我发现yield不能使用that循环,例如:
while (resultSet.next()) yield new Row(resultSet)
为什么Scala是这样设计的?
我已经搜索过谷歌和堆栈溢出,但没有找到答案。
我已经定义了方法double。
def double(i: Int): Int = i * 2
val p = double {
print("Hello!");
5
}
print(p)
正如你所看到的,我们不仅可以传递整数参数,我们还可以调用一些逻辑(print)。为什么我可以这样做呢?那么Scala是如何解决这个问题的呢?在Scala中{}到底是什么意思?
Tutorial在最初提到了可变集,但是为什么在添加新元素时要将实例名从res4更改为res5?'res‘不是REPL打印的实例名吗?下面是上下文中的代码。scala的初学者。如果这个问题微不足道,请耐心等待。 scala> val set = scala.collection.mutable.Set[Int]()
val set: scala.collection.mutable.Set[Int] = Set()
scala> set += 1
val res0: scala.collection.mutable.Set[Int] = Set(1)
scala>
下面是一个例子:
$ scala
Welcome to Scala 2.11.8 (OpenJDK 64-Bit Server VM, Java 1.8.0_112).
Type in expressions for evaluation. Or try :help.
scala> val a: Unit = 1
<console>:11: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
val a:
scala> def sum(a:Int)={a} //I have defined the function with a single parameter
sum: (a: Int)Int
sum{val b=10+20} //passing the parameter as expression block
Getting error
scala> sum{val b=10+20}
<console>:9: error: type mismatch;
found : Unit
required: Int
sum{val b
我正在尝试编写一个简单的函数,它将在Scala中交换一个(Int,String)元组。我尝试了许多事情,并不断地获得编译器错误,例如:
def swap (p:(Int,String)) : (String,Int) = {
var s = p._1
var t = p._2
var u = (p._2, p.1)
}
[error] found : Unit
[error] required: (String, Int)
[error] }
[error] ^
[error] one error found
为什么它总是说它找到了
我正在尝试将Thymeleaf视图与Scala结合使用。我有一个电子邮件集合的User实体,我想在百里叶模板中访问这些电子邮件:
在User.scala中
case class User (@BeanProperty val emails: scala.immutable.List[String])
在某些-胸腺叶-template.html
<div th:text="${user.emails[0]}">...</div>
问题是Spring表达式求值器( Thymeleaf将表达式求值工作委托给它)只理解Java集合类型,因此尝试获取Scala列表
我对scala非常陌生,并且尝试将scala代码转换为Kotlin,这只是一种让我头脑清醒的方法。
其中一个问题是将scala函数转换为Kotlin函数。
def changeXToDigit(value:String): String = {
value.map {
case 'X' => random.nextInt(10).toString
case letter => letter
}.mkString
}
我知道在科特林没有类似的mkString,但我想
fun changeXToDigit(value: String)
守则如下:
scala> def f(x:Int => Unit):Unit = 1
<console>:7: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
def f(x:Int => Unit):Unit = 1
^
f: (x: Int => Unit)Unit
scala> f(_=>2);
正如我从书中读到的,scala操作符的结合性从左到右,除非操作符以":“字符结尾。
给定val a = b = c,它变成val a = (b = c),并使a被初始化为Unit。
但是为什么它不成为(val a = b) = c,并导致编译错误,因为使用一个单元(从a=b返回)来接收c
在我真正输入(val a = b) = c之后,编译器会抱怨illeagal start of simple expression和指向val的指针。为什么这两个赋值运算符没有从左到右分组?
我尝试使用foreach计算字符串的unicode值的乘积。
scala> var s:Long = 1;"Hello".foreach(s *= _)
s: Long = 9415087488
scala> var s:Long = 1;"Hello".foreach(s = s * _)
<console>:10: error: missing parameter type for expanded function ((x$1) => s.$times(x$1))
"Hello".foreach
我试图理解scala中这两个语法之间的差异,以及它们为什么没有相同的结果。
testVal
和
testVal2
定义方式不相同。
object FunctionVsVal2 extends App {
val testVal: () => Int = {
val r = util.Random.nextInt
() => r
}
val testVal2: () => Int = () => {
val r = util.Random.nextInt
r
}
println(testVal()