大家好,我正在尝试理解scala中的符号"_",它看起来像一个通配符,但我不明白为什么在给定的场景中.
var l = List("a","b" ,"c")
// Works "s" works as a variable.
l.foreach( s =>
if(s=="a"){
print(s)
}
)
// Works _ takes the place of "s"
l.foreach(
print(_)
)
//So the doubt is whether "_" is a wildcard that does not work well.
l.foreach(
if(_=="a"){
print(_)
}
)
Run Code Online (Sandbox Code Playgroud)
"_"应该像变量一样s,但为什么不呢?
我现在是FP的学生.当我查看不同函数语言的不同语法提供时,我在Elm示例代码中遇到了一个模式.我很好奇.
这是示例代码
myList = [{foo = "bar1"},{foo = "bar2"}]
foos = myList |> List.map .foo
Run Code Online (Sandbox Code Playgroud)
在这里的最后一行,List.map正在通过.foo.我相信这种风格被称为无点,但是将属性传递给List.map函数的具体模式又如何呢?
这是更常见的事情吗?是否可以在Haskell中执行此操作?F#?Scala呢?谢谢你的帮助.
这里的模式的正式(或非正式?)名称是什么?对象的属性用作获取对象并在其上调用所述属性的函数的简写?
我有以下Scala/Play!码:
case class Tweet(from: String, text: String)
implicit val tweetReads = (
(JsPath \ "from_user_name").read[String] ~
(JsPath \ "text").read[String]) (Tweet.apply _)
Run Code Online (Sandbox Code Playgroud)
关于上面代码的语法和含义,我有几个问题:
~调用的方法?Tweet.apply什么?编辑1:完整源代码:
package models
import play.api.libs.json._
import play.api.libs.json.util._
import play.api.libs.json.Reads._
import play.api.libs.json.Writes._
import play.api.libs.functional.syntax._
case class Tweet(from: String, text: String)
object Tweet {
implicit val tweetReads = (
(JsPath \ "from_user_name").read[String] ~
(JsPath \ "text").read[String])(Tweet.apply _)
implicit val tweetWrites = (
(JsPath \ "from").write[String] ~
(JsPath \ …Run Code Online (Sandbox Code Playgroud) 谷歌似乎不是一个搜索Scala语法的好地方.那有什么好的地方,比如保留字<:吗?谢谢
在下面的代码中,下划线字符的使用的分类(或技术名称)是什么?
scala> def f: Int => Int = _ + 1
f: Int => Int
scala> f(2)
res0: Int = 3
Run Code Online (Sandbox Code Playgroud) 我今天遇到了一种方法,该方法具有以下特征:
def foo() : Future[_] = { /* some code */ }
Run Code Online (Sandbox Code Playgroud)
我的问题是返回类型在这里是什么意思?这是否意味着此方法返回a Future并且我不在乎计算的类型是什么?或者是别的什么?
该阶文档具有一个代码示例,其包括下面的行:
val numberFunc = numbers.foldLeft(List[Int]())_
Run Code Online (Sandbox Code Playgroud)
方法调用后的下划线是什么意思?
所以我阅读了右结合运算符,例如 Scala 中的 cons 运算符。我想知道为什么它们在 case 语句中起作用。似乎您可以在这里使用 cons 语句进行模式匹配?
def findKth1[A](k:Int, l:List[A]):A = (k, l) match {
case (0, h::_) => h
case(k, _::tail) if k > 0 => findKth1(k - 1, tail)
case _ => throw new NoSuchElementException
}
findKth1(2, List(3,4,5,6))
res1: Int = 5
Run Code Online (Sandbox Code Playgroud)
占位符在这里做什么?我只看到了这样的功能使用的占位符:<SomeList>.map(_.doThing)。是同一个概念吗?
唯一能与区别::,并:::是,:::用于右2名名单?
我正在学习 Scala 并且有一个非常基本的问题。考虑使用占位符语法的以下两个表达式 -
// Syntax A
val fnA = (_: Int, _: Int) => _ / _
// Syntax B
val fnB = (_: Int) / (_: Int)
Run Code Online (Sandbox Code Playgroud)
以及他们尝试的应用——
// Syntax A
fnA(33, 3)
// Syntax B
fnB(33, 3)
Run Code Online (Sandbox Code Playgroud)
在这两个中,只有 B 和 App(B) 是有效的语法,我不知道为什么。如果编译器能够推断参数(以及应用它们的顺序),fnB为什么它不能为fnA?我的问题是基于fnB一个简写的前提,fnA我很确定这种推理存在缺陷。我只是不确定缺陷是什么。
我已经阅读了一些其他问题,例如Scala中下划线的所有用途是什么?虽然我确信这个问题已被提出,但我无法解决所有其他17000个Scala问题.
有一个Foreach有奇怪的行为,占位符没用,但它似乎仍然是一个隐藏的功能:
scala> val is = (1 to 5) toList
is: List[Int] = List(1, 2, 3, 4, 5)
scala> is foreach { i => println("Hi.") ; Console println 2 * i }
Hi.
2
Hi.
4
Hi.
6
Hi.
8
Hi.
10
scala> is foreach { println("Hi.") ; Console println 2 * _ }
Hi.
2
4
6
8
10
Run Code Online (Sandbox Code Playgroud)
请有人解释一下我的区别吗?
如果你感到一阵热情并尝试:
scala> is foreach { i => println("Hi!") ; Console println …Run Code Online (Sandbox Code Playgroud)