我有一个d维数组,A和长度等于d的向量inds.我想在inds访问A的值.
理想情况下,我会做类似A(*inds)的东西(借用Python的解包语法).我不知道如何在MATLAB中做到这一点.
如果我做A(inds),我实际上从A得到了单独的值,这不是我想要的.我想要的是inds的元素i是函数调用A()中的第i个参数.
我有两个对象,每个对象都有本地定义的类型,我想确定类型是否相同.例如,我想要编译这段代码:
trait Bar {
type MyType
}
object Bar {
def compareTypes(left: Bar, right: Bar): Boolean = (left.MyType == right.MyType)
}
Run Code Online (Sandbox Code Playgroud)
但是,编译失败,"值MyType不是Bar的成员".
这是怎么回事?有没有办法做到这一点?
是否可以在import不指定对象中的main函数的情况下使用Scala ,而不package在源文件中使用您要导入的代码的关键字?
一些解释:在Python中,我可以在一些文件"Lib.py"中定义一些函数,写一下
from Lib import *
Run Code Online (Sandbox Code Playgroud)
在同一目录中的其他文件"Run.py"中,使用"运行中的Lib"中的函数,然后使用该命令运行"运行" python Run.py.此工作流程非常适合我可能在一小时内编写的小脚本.
在Scala中,似乎如果我想要包含来自另一个文件的函数,我需要开始在多余的对象中包装东西.我宁愿不这样做.
上下文:在SBT管理的项目中编写Scala单元测试.
当我执行sbt test运行我的单元测试时,断言在我的代码中某处失败,我得到类似下面的内容(仅此而已):
Test com.reach.ml.test.TestLSHEasy.T0 failed: assertion failed
Run Code Online (Sandbox Code Playgroud)
这告诉我哪个单元测试导致断言失败,但没有断言它是什么.如果我直接运行相同的测试(不使用sbt),我会得到一个完整的堆栈跟踪,这对于调试非常有用.所以我的问题是:当测试崩溃时,如何让SBT打印出堆栈跟踪?
我想写一个"toSource"函数,它将生成基本案例类的源代码.例如,我想:
case class Person(name: String, age: Int)
val bob = Person("Bob", 20)
println(toSource(bob)) // Should print """Person("Bob", 20)"""
Run Code Online (Sandbox Code Playgroud)
"toString"函数几乎给了我想要的东西,但它会丢弃字符串的引号:
println(bob.toString) // Prints """Person(Bob, 20)"""
Run Code Online (Sandbox Code Playgroud)
任何想法如何做到这一点?
在SBT中,只要源文件发生更改,就可以使用"〜"标记触发操作.例如,
sbt> ~test
Run Code Online (Sandbox Code Playgroud)
将在源更改时运行单元测试.
当源更改或本地依赖关系发生更改时,是否有任何好的方法可以触发操作?当同时开发两个项目时,这将非常有用,其中一个项目取决于另一个项目.
我知道你可以通过手动指定文件或基础项目的路径来获得这种行为,但这很脆弱,而且SBT已经知道它在哪里得到它的本地工件,所以这是我想要避免的.
我用Scala隐式解决方法得到了意想不到的行为,我想知道这个bug是在我的理解中还是在Scala编译器中.这是代码:
trait Trait1[A]
implicit def trait1ToList[A](trait1: Trait1[A]): List[A] = ???
trait Trait2[C]
{
implicit def trait2Implicit[A, C <% List[A]]: Trait2[C] = ???
// Compiles, as expected.
implicitly[Trait2[Trait1[Int]]]
}
{
implicit def trait2Pimp[A, C <% List[A]](int: Int): Trait2[C] = ???
// Compiles, as expected.
implicitly[Int => Trait2[Trait1[Int]]]
// Does not compile, which is unexpected.
// This is weird, because the fact the previous line compiles
// implies the implicit conversion is in scope.
2: Trait2[Trait1[Int]]
}
Run Code Online (Sandbox Code Playgroud)
编译错误是:
[error] /Users/eric/Dropbox/t/2013_q1/billy/src/test/scala/billy/experiments/wideBaseline/testWideBaselineExperiment.scala:56: No implicit …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个自定义SPickler/Unpickler对来解决当前scala-pickling的局限性.我试图挑选的数据类型是一个案例类,其中一些字段已经拥有自己的SPickler和Unpickler实例.我想在我的自定义pickler中使用这些实例,但我不知道如何.
这是我的意思的一个例子:
// Here's a class for which I want a custom SPickler / Unpickler.
// One of its fields can already be pickled, so I'd like to reuse that logic.
case class MyClass[A: SPickler: Unpickler: FastTypeTag](myString: String, a: A)
// Here's my custom pickler.
class MyClassPickler[A: SPickler: Unpickler: FastTypeTag](
implicit val format: PickleFormat) extends SPickler[MyClass[A]] with Unpickler[MyClass[A]] {
override def pickle(
picklee: MyClass[A],
builder: PBuilder) {
builder.beginEntry(picklee)
// Here we save `myString` in some custom way.
builder.putField(
"mySpecialPickler",
b …Run Code Online (Sandbox Code Playgroud) 以下代码在GCC 4.2下编译时没有警告,据我所知,它实际上不应该:
#include <fstream>
__attribute__((pure))
double UnpureFunction(double* x) {
x[0] = 42;
return 43;
}
int main () {
double x[] = {0};
double y = UnpureFunction(x);
printf("%.2f %.2f\n", x[0], y);
}
Run Code Online (Sandbox Code Playgroud)
(打印"42.00 43.00".)
据我了解,pure属性告诉编译器该函数没有外部效果(请参阅此处的 "纯"部分).但是UnpureFunction正在修改它的参数.为什么允许这种情况发生?至少,编译器可以自动使每个参数为const.
我在C++(C++ 11)中探索模板恶作剧,我想要的一件事是抽象类中的纯虚拟类型.这就像Scala的抽象类型.在C++中,我想做类似以下的事情:
struct Base {
// Says any concrete subclass must define Type, but doesn't
// require that it be anything in particular.
virtual typedef MyType;
};
struct Derived : Base {
// Won't compile unless this typedef exists.
typedef int MyType;
};
Run Code Online (Sandbox Code Playgroud)
知道怎么做吗?
scala ×8
c++ ×2
sbt ×2
attributes ×1
implicit ×1
import ×1
include ×1
matlab ×1
stack-trace ×1
templates ×1
unit-testing ×1