在Scala中填充Vector

时间:2016-08-19 18:13:15

标签: scala vector

我是Scala的新人。

我在名为Vector的课程中有Sentence

val tree: Option[Vector[Node]]

此类的构造函数接收Array[String]个单词。对于每个单词,我必须创建一个Node对象(已创建一个类I),然后用所有节点填充Vector

我正在尝试填充tree,但我在编写代码时遇到了问题。我尝试过使用:

private val tree: Option[Vector[Node]] = 
    words.foreach(w => new Node(w, 9, "d", 0))

private val tree: Option[Vector[Node]] = 
    words.foreach(w => tree :: new Node(w, 9, "d", 0))

我也试过了map,但它不起作用。

我怎样才能为每个单词创建Node并将其添加到Vector

注意:如果您需要更多代码,请告诉我并更新问题。

2 个答案:

答案 0 :(得分:2)

问题是您使用的是 //Create a web request with the specified URL string path = @"http://localhost/test.xml1"; WebRequest myWebRequest = WebRequest.Create(path); //Senda a web request and wait for response. try { WebResponse objwebResponse = myWebRequest.GetResponse(); Stream stream= objwebResponse.GetResponseStream(); } catch (WebException ex) { if (((HttpWebResponse)(ex.Response)).StatusCode == HttpStatusCode.NotFound) { throw new FileNotFoundException(ex.Message); } } 。对于foreachArray[A]具有签名foreach。这里,参数函数def foreach(f: (A) ⇒ Unit): Unit的返回类型是f,这意味着它不应该返回任何内容,只是对数组中的每个元素执行某些操作(如print)。

您要找的是Unit,其中包含签名map。这里,参数函数def map[B](f: (A) ⇒ B): Array[B]的返回类型是f,这意味着它应该返回类型为B的实例。因此,对于B类型的每个元素,A将应用map来计算类型为f的实例。

B

答案 1 :(得分:1)

简单地:

// map each word to a Node
val tree: Array[Node] = words.map(w => new Node(w, 9, "d", 0))

如果您想要Vector

val treeVector: Vector[Node] = tree.toVector

Option并没有带来多少,因为它等同于emty Vector