小编Mar*_*lic的帖子

将“*”和“*”参数传递给 split 的区别

我正在研究 spark - scala 并在 scala 中找到它。拆分与python不同。举个例子:

我的功能:

for (line <- lines) {
  var fields = line.split("|")
  if(fields.length > 1){
    movieNames += (fields(0).toInt -> fields(1))
  }
Run Code Online (Sandbox Code Playgroud)

给了我一个错误但是当我将其更改为...

for (line <- lines) {
  var fields = line.split('|')
  if(fields.length > 1){
    movieNames += (fields(0).toInt -> fields(1))
  }
Run Code Online (Sandbox Code Playgroud)

那么,它会解决,“|”和'|有什么区别?'在逻辑级别

logic scala apache-spark

1
推荐指数
1
解决办法
46
查看次数

为什么函数参数名称中不允许尾随下划线?

我尝试在 Scala 函数参数名称中使用尾随下划线以避免与关键字冲突type,但出现错误:

Welcome to Scala 2.13.1 (Java HotSpot(TM) 64-Bit Server VM, Java 11.0.1).
Type in expressions for evaluation. Or try :help.


scala> def foo(type_: Char): Char = type_
                      ^
       error: ':' expected but identifier found.

scala>
Run Code Online (Sandbox Code Playgroud)

我阅读了一些关于在 Scala 中使用下划线的解释,但没有一个提到我的情况

scala

1
推荐指数
1
解决办法
53
查看次数

将 Some(List()) 变成 None

我有可选列表,例如:

val optionalEmptyList = Option(List[String]())

val optionalNonEmptyList = Option(List[String]("1","2"))

我想用 None 替换可选的空列表,同时保持可选的非空列表原样。

我想出了以下解决方案:

optionalEmptyList.flatMap(l => if (l.isEmpty) None else Option(l))

optionalNonEmptyList.flatMap(l => if (l.isEmpty) None else Option(l))

它有效,但似乎令人费解。有没有更简单的解决方案?

scala list optional

1
推荐指数
1
解决办法
46
查看次数

为什么可以定义一个具有未具体化的路径依赖类型的类?

考虑以下示例:

trait Supe {

  type Out <: Supe
  def out: Out
}

class Reif1 extends Supe {

  type Out = Reif1
  override def out: Out = this
}

class Reif2 extends Supe {

  type Out >: this.type <: Reif2
  override def out: Out = this
}
Run Code Online (Sandbox Code Playgroud)

class Reif1显然应该工作。astype Out被具体化并成为类型别名

class Reif2也有效,但认真吗?type Out仅定义了上限/下限,并且边界甚至不够紧密:this.type是单例类型,并且Reif2是类类型。那么Out如果Reif2被实例化会是什么样子呢?它会是this.type吗?或者Reif2?但更大的问题应该是:为什么 scalac 2.12/2.13 允许编译它?

scala abstract-type path-dependent-type

1
推荐指数
1
解决办法
87
查看次数

使用scala-cats IO类型封装可变Java库

我知道,一般来说,关于决定要建模什么效果,有很多话要说。这个讨论是在 Scala 函数式编程中关于 IO 的章节中介绍的。

\n

尽管如此,我还没有读完这一章,我只是从头到尾地浏览了一遍,然后才和 Cats IO 一起阅读。

\n

与此同时,我在工作中遇到了一些需要很快交付的代码的情况。\n它依赖于一个与突变有关的 Java 库。该库是很久以前开始的,由于遗留原因,我没有看到它们发生变化。

\n

无论如何,长话短说。实际上,将任何变异函数建模为 IO 是封装变异 Java 库的可行方法吗?

\n

Edit1(根据要求我添加一个片段)

\n

准备好建立一个模型,改变模型而不是创建一个新模型。例如,我会将 jena 与 gremlin 进行对比,gremlin 是一个基于图形数据的功能库。

\n
def loadModel(paths: String*): Model =\n    paths.foldLeft(ModelFactory.createOntologyModel(new OntModelSpec(OntModelSpec.OWL_MEM)).asInstanceOf[Model]) {\n      case (model, path) \xe2\x87\x92\n        val input = getClass.getClassLoader.getResourceAsStream(path)\n        val lang  = RDFLanguages.filenameToLang(path).getName\n        model.read(input, "", lang)\n    }\n
Run Code Online (Sandbox Code Playgroud)\n

那是我的 scala 代码,但是网站中记录的 java api 看起来像这样。

\n
// create the resource\nResource r = model.createResource();\n\n// add the property\nr.addProperty(RDFS.label, model.createLiteral("chat", "en"))\n .addProperty(RDFS.label, model.createLiteral("chat", "fr"))\n .addProperty(RDFS.label, model.createLiteral("<em>chat</em>", true));\n\n// …
Run Code Online (Sandbox Code Playgroud)

scala scala-cats cats-effect

1
推荐指数
1
解决办法
665
查看次数

模拟案例类进行测试

我有一个案例课

case class InputCriteria(a: Int) {
   val b: Int = config.getInt("some path")
}
Run Code Online (Sandbox Code Playgroud)

如何模拟这个案例类并覆盖 b 的值?

scala scalatest scalamock

0
推荐指数
1
解决办法
1682
查看次数

如何在模式匹配中分配变量

我有一个方法,需要以一年(int)作为参数。根据传入的年份,我需要分配一个变量,然后在查询中使用该变量:

def findByYear (year: Int): Future[Int] = {
  val tableName = ""
  year match {
    case 1970 => tableName = "table1970" //this errors out
    case 1980 => tableName = "table1980" //this errors out
  }
  config.db.run {
    sqlu"SELECT count(*) from #${tableName}"
  }
}
Run Code Online (Sandbox Code Playgroud)

由于scala不允许重新分配,因此出现了以上错误。有没有更好的方法来执行此操作,而不是将config.db.run子句放在每个子句中,case后者将成为非常重复的代码?

scala immutability pattern-matching

0
推荐指数
1
解决办法
50
查看次数

模式匹配未提供预期的结果

根据理解,模式匹配不起作用。

我在课本“ Scala中编程”中阅读了模式匹配的概念。

我有一个模式匹配的定义,如下所示。

def checkMe (a:Any) =  a match {
      case Int => "I am an Integer"
      case Double => "I am a Double"
      case Char => "I am a Charecter"
      case _ => "I am something else"
     }
Run Code Online (Sandbox Code Playgroud)

无论我在调用该函数时传递了什么,总是执行默认情况。

例如:checkMa(100)给出“我是别的东西” checkMe(10。)也给出“我是别的东西”等。

有人可以帮我理解定义中的错误吗。

我希望定义根据我通过的类型执行。

scala pattern-matching

0
推荐指数
1
解决办法
53
查看次数

如何对单例对象使用导入语句

下面的示例来自Akka的Hello World项目,可从此处给出的说明下载。

示例代码在AkkaQuickstart.scala文件中。Greeter和Printer类以及具有相同名称的对象都在com.example包下的同一文件中。

在Greeter类中,有两个import语句:

import Greeter._
import Printer._
Run Code Online (Sandbox Code Playgroud)

当所有这些对象都定义在同一包中的同一文件中时,为什么需要在Greeter类中导入Greeter和Printer?它们是必需的,因为如果删除了这些导入,则代码将无法编译。

此处有关导入的Scala文档规定如下:

“导入子句用于访问其他程序包中的成员(类,特征,函数等)。不需要访问子句来访问同一程序包的成员。” 但是在下面的代码中,即使所有类和对象都在同一包中,也需要导入。为什么需要导入?

同样,对于Printer类,有以下导入语句:

import Printer._
Run Code Online (Sandbox Code Playgroud)

对此主题的任何指导将不胜感激。

完整的示例代码如下:

//#full-example
package com.example

import akka.actor.{ Actor, ActorLogging, ActorRef, ActorSystem, Props }

//#greeter-companion
//#greeter-messages

object Greeter {
  //#greeter-messages
  def props(message: String, printerActor: ActorRef): Props = Props(new 
  Greeter(message, printerActor))
  //#greeter-messages
  final case class WhoToGreet(who: String)
  case object Greet 
 }

//#greeter-messages
//#greeter-companion

//#greeter-actor
class Greeter(message: String, printerActor: ActorRef) extends Actor {
import Greeter._    //*why is import required here?*
import Printer._    //*why is import …
Run Code Online (Sandbox Code Playgroud)

import singleton scala akka

0
推荐指数
1
解决办法
64
查看次数

为什么打印List [Array [String]]不输出值?

我试图理解我从下面的代码中获得的输出,它显示一些带有前缀的字母数字值@。我如何将其更改为("Hello,world"),("How,are,you")

Scala代码:

val words = List("Hello_world","How_are_you" )
val ww= words.map(line=>line.split("_"))
println(ww)
Run Code Online (Sandbox Code Playgroud)

输出

List([Ljava.lang.String;@7d4991ad, [Ljava.lang.String;@28d93b30)
Run Code Online (Sandbox Code Playgroud)

arrays scala println

0
推荐指数
1
解决办法
84
查看次数