我已经看了scala-lang.org上的调查列表,并注意到一个奇怪的问题:" 你能说出"_"的所有用途吗? " 你能?如果是,请在此处进行.我们赞赏解释性的例子.
我觉得很困惑的一件事是知道我可以在方法和变量名中使用哪些字符和组合.例如
val #^ = 1 // legal
val # = 1 // illegal
val + = 1 // legal
val &+ = 1 // legal
val &2 = 1 // illegal
val £2 = 1 // legal
val ¬ = 1 // legal
Run Code Online (Sandbox Code Playgroud)
据我了解,字母数字标识符和运算符标识符之间存在区别.除非用下划线(混合标识符)分隔,否则您可以将一个匹配或另一个匹配但不能同时混合.
从Scala中的编程 6.10节,
运算符标识符由一个或多个运算符字符组成.运算符字符是可打印的ASCII字符,例如+,:,?,〜或#.
更确切地说,运算符字符属于Unicode数学符号集(Sm)或其他符号(So),或者不是字母,数字,括号,方括号,花括号,单个或双精度的7位ASCII字符引号,或下划线,句号,分号,逗号或后退字符.
所以我们被排除在使用()[]{}'"_.;,和`之外
我抬起头,统一的数学符号的维基百科,但我发现没有包括的那些+,:,?等是否有一个明确的清单某处的运营商角色是什么?
此外,任何想法为什么Unicode数学运算符(而不是符号)不算作运算符?
有人可以帮我理解这段代码
case "Foo" Foo(data) -> _ => { /*.. implementation */}
Run Code Online (Sandbox Code Playgroud)
我看到了Foo.unapply(数据)的用法,但我不明白这部分是什么
- > _
如何以及何时使用它
例如,一些Scala API 将此别名为self
trait Function1[-T1, +R] extends AnyRef { self =>
Run Code Online (Sandbox Code Playgroud)
我知道这种混叠一般是如何工作的,但是看不出像Function1这样的特性如何从中受益.除了最初的提及,Function1 在其定义中的任何地方都不使用self,那么它的目的是什么呢?
之前已经问过这个问题的变体,但答案并不直接适用.答案已经讨论过自我类型和内部类,但我不知道这是如何适用的.
我一直潜入scala,到目前为止我非常喜欢它.我正在开始模式匹配和案例类,以下让我有点难过.我知道它的作用,但我想知道究竟发生了什么
var list = List(2,3,4)
1::list
Run Code Online (Sandbox Code Playgroud)
如果到目前为止我的理解是正确的.然后::表示一个案例对象.如果是这样,我的问题是:
我怎么"把它"应用到1?而不是::是一个方法1.基本上可以有人拉这个语句1 ::列表分开,显示真正发生的事情(即什么方法被调用什么对象)
谢谢
这些代码中这些下划线用法之间有什么区别和术语名称:(参见handler(resource)部分)
1.
def readFile[T](f: File)(handler: FileInputStream => Byte => T): T = {
val resource = new java.io.FileInputStream(f)
try {
val hh = handler(resource)_
hh(2)
} finally {
resource.close()
}
}
val bs = new Array[Byte](4)
readFile(new File("scala.txt")) {
input => b: Byte => println("Read: " + (input.read(bs) + b))
}
Run Code Online (Sandbox Code Playgroud)
我收到编译错误:
Error:(55, 29) _ must follow method; cannot follow Byte => T
val hh = handler(resource)_
^
Run Code Online (Sandbox Code Playgroud)
这是什么意思?
2.
def readFile[T](f: File)(handler: FileInputStream => Byte => T): …Run Code Online (Sandbox Code Playgroud) 我import在一些发现了以下内容scala:
import Predef.{println => _, _}
Run Code Online (Sandbox Code Playgroud)
怎么=>办?
这意味着什么?
listeners ::= listener
list = num :: list
Run Code Online (Sandbox Code Playgroud)
特别是我不懂" :: "运算符.
谷歌似乎不是一个搜索Scala语法的好地方.那有什么好的地方,比如保留字<:吗?谢谢
我正在学习scala.我正在读Scala的不耐烦.
1.)
逆天
有区别吗?
for (i <- 0 to 10)if (i % 2 == 0) println(i)
for (i <- 0 to 10 if i % 2 == 0) println(i)
Run Code Online (Sandbox Code Playgroud)
2.)
我总是看到以下符号,=>但他们从不解释它的作用.
有时我认为这是一个演员,但它是完全不同的东西,我希望你能搞清楚.
我有以下代码,它应该搜索数组并查看是否与第二个参数匹配.
def any(check: Set[Any], expr: Boolean): Boolean = {
var checked = check.filter(_ => expr)
if (checked == Set())
return false
else
return true
}
Run Code Online (Sandbox Code Playgroud)
它应该被称为这样:
any(Set(3, 4, 5, 6), _ > 5)
但是当我打电话给它时:
error: missing parameter type for expanded function ((x$1) => x$1.$greater(5))
Run Code Online (Sandbox Code Playgroud)
我对函数式语言和Scala的经验很少,所以,请给我一个彻底的解释,说明发生了什么以及如何解决它!
lambda functional-programming scala set scala-placeholder-syntax
可能重复:
Scala标点符号(又名符号,运算符)
scala 的目的->和<-操作符是什么?是否有任何有用的文档解释scala中使用的各种运算符 - 我似乎太过于混淆太多了:)