我有一个简单的 scala maven 模块,它是一个更大项目的一部分(我按照这里的描述创建了它:https : //www.jetbrains.com/help/idea/2016.2/creating-a-maven-module.html):
package com.myorg.simplr
import [...]
@SerialVersionUID(100L)
case class Simplr (){
//class code
}
Run Code Online (Sandbox Code Playgroud)
我试图在 spark shell 中使用这个类,所以我构建了一个 jar 文件“simplr-1.0.jar”并使用 --jars simplr-1.0.jar 启动了 spark shell。
然后,当我尝试导入时,我得到以下信息
scala> import com.myorg.simplr.Simplr
<console>:25: error: object myorg is not a member of package com
import com.myorg.simplr.Simplr
^
Run Code Online (Sandbox Code Playgroud)
我怎样才能使导入工作?
我使用 maven 构建,这是我的 pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>my-parent-project</artifactId>
<groupId>com.myorg</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>simplr</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.10</artifactId>
<version>1.6.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_2.10</artifactId> …Run Code Online (Sandbox Code Playgroud) 我有多个函数可以在一些自定义容器(或std :: vector)上工作:
template <class T> void op1(const My_container<T> &a) { /* do something */ }
template <class T> void op2(My_container<T> a) { /* do something */ }
Run Code Online (Sandbox Code Playgroud)
现在,我想要另一个功能
template <class T> void apply_op(const My_container<T> &a, void (*op)(My_container<T>)) {
op(a);
}
Run Code Online (Sandbox Code Playgroud)
但是,我希望apply_op能够同时使用op1和op2.
我想我可以复制两次.但是如果操作具有更多参数,并且任一参数可以是通过值或通过const引用,则副本的数量将非常快地变得非常大.另一种方法是编写所有函数来获取const引用并在必要时将它们复制到内部,但这涉及重写所有的op函数.
但有没有办法(模板,也许?)让apply_op适用于这两种操作?