&variable在模式或闭包参数中使用它意味着什么?
for &code in self.exit_code.iter() { ... }
let mut new_seps = do seps.iter().fold(~[]) |result, &next| { ... }
Run Code Online (Sandbox Code Playgroud)
下面我们就&code和&next在for循环和封闭的定义.什么&这些的意思是签?为什么我们不能简单地使用code和next没有&符号?它与ref模式匹配中的限定符有关吗?它与特征实现&中的self参数有关吗?
我在当前的Rust参考手册和教程中都找不到任何关于此语法的内容.目前我认为这是某种隐式解除引用(这是从错误消息中得出的,如果我&在模式中省略的话会出现),但我不确定.
从 sbt 0.13 开始,定义所有配置的推荐方法是multi-project .sbt build definition。如何为每个项目定义设置是绝对清楚的;但是,应该如何定义构建范围的设置,例如,inThisBuild或Globalscopes?
使用 Scala 构建定义很清楚:我们有settings来自Buildtrait 的关键:
object MyBuild extends Build {
override lazy val settings = super.settings ++ Seq(
someKey := someValue
)
}
Run Code Online (Sandbox Code Playgroud)
someKey默认情况下,Now的值将是构建范围的。或者,它可以直接在.sbt具有ThisBuild范围的文件中定义:
someKey in ThisBuild := someValue
Run Code Online (Sandbox Code Playgroud)
但是,在多项目.sbt构建中没有自然的地方来定义这些选项。我怀疑它们应该在具有ThisBuild范围的项目之一中定义:
val someProject = project
.settings(someKey in ThisBuild := someValue)
Run Code Online (Sandbox Code Playgroud)
但这是非常违反直觉的,也不是很清楚:这些设置真的适用于全球还是真的属于特定项目?如果我在多个项目中定义相同的键怎么办?
val project1 = project.settings(someKey in ThisBuild := someValue1)
val project2 = project.settings(someKey in ThisBuild := …Run Code Online (Sandbox Code Playgroud) 您如何了解哪些对象被注入哪里?我有一个相当小的项目,我使用guice,而不是因为我真的需要它(鉴于项目仍然很小),而是因为我想要更好地了解它.
我已经开始松开概述只有~10个班级; 是否有工具分析代码以显示依赖关系图?
这样可以更容易地快速查看我忘记了什么或者我需要单点范围注入的位置.还有guice,很多东西都是隐含的,能够明确地看到这些东西将有助于将来进行调试.
我想~str在Rust中对base64 进行编码,以实现HTTP基本身份验证.
我找到了extra::base64,但我不明白应该如何使用它.该ToBase64特性似乎有一个实现&[u8],但编译器找不到它.以下测试程序:
extern mod extra;
fn main() {
use extra::base64::MIME;
let mut config = MIME;
config.line_length = None;
let foo = ::std::os::args()[0];
print(foo.as_bytes().to_base64(config));
}
Run Code Online (Sandbox Code Playgroud)
在Rust 0.9上出现以下错误失败:
rustc -o test test.rs
test.rs:9:11: 9:44 error: type `&[u8]` does not implement any method in scope named `to_base64`
test.rs:9 print(foo.as_bytes().to_base64(config));
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
有人可以通过下面的错误消息解释Scala编译器试图告诉我的内容吗?
object Some {
def apply[T: ClassTag](data: T)(implicit ordering: Ordering[T]): T = data
}
object Other {
def apply[T: ClassTag](data: T)(implicit ordering: Ordering[T]): T =
Some(data)(ordering.reverse)
}
Run Code Online (Sandbox Code Playgroud)
编译说:
not enough arguments for method apply: (implicit evidence$2: scala.reflect.ClassTag[T], implicit ordering: Ordering[T])T in object Some. Unspecified value parameter ordering.
Run Code Online (Sandbox Code Playgroud)
当我ClassTag在对象中添加方法时,出现错误Some,以便在那里使用一些内部数组.最初,代码是(并且编译没有错误):
object Some {
def apply[T](data: T)(implicit ordering: Ordering[T]): T = data
}
object Other {
def apply[T: ClassTag](data: T)(implicit ordering: Ordering[T]): T =
Some(data)(ordering.reverse)
}
Run Code Online (Sandbox Code Playgroud)
我知道ClassTag添加一个隐含的类型信息来克服擦除,但我不明白这与我的排序隐式参数有什么关系,或者为什么编译器突然认为排序没有价值......
我有一个maven项目javaruntime和一个androidruntime依赖于javaruntime项目的maven 项目.每个项目都有一个Guice-Module将一些类绑定到Interfaces.
在javaruntime接口IElementFactory和类C中获取IElementFactory构造函数注入:
public class C {
@Inject
public C(IElementFactory factory, ...(other interfaces)...) {...}
// ...
}
Run Code Online (Sandbox Code Playgroud)
该项目的具体实施IElementFactory是在androidruntime项目中并被调用AndroidElementFactory.其他接口的所有实现都在javaruntime.
在javaruntime我有JUnit测试应该使用一个MockElementFactory因为它不知道androidruntime.
如果我将模块绑定IElementFactrory到AndroidElementFactory唯一androidruntime模块,那么测试当然会失败,因为javaruntime模块/项目中没有为该接口绑定任何实现.
如果我然后绑定MockElementFactory的javaruntime模块测试都很好,但我不能编译androidruntime,因为IElementFactory已经被绑定到MockElementFactory并覆盖有约束力较差,在吉斯不reommended.
但是我如何才能实现Mock用于测试,而在android-project中仍然可以绑定正确的实现?
我有一个对象A做了一些重要的加载.我使用它的提供者.我有对象B需要A进行初始化.但是在一个对象CI中想要传递A和B,做好充分准备.
是否有可能让提供者一直返回相同的实例,或者guice模块是否保持提供该实例并在那里停止?
编辑:
我在guice网站上有以下几点解释:
@Provides @Singleton
TransactionLog provideTransactionLog() {
...
}
Run Code Online (Sandbox Code Playgroud)
这是解决方案吗?单身人士是否适用于提供者或提供者.如果它适用于提供者那么,解决方案是保留一个实例并每次返回它.但这不适用于提供方法.有帮助吗?
假设我想创建一个多次使用另一个解析器的组合器,例如,解析由两种引号分隔的字符串:
fn quoted<'a, F: 'a, O, E: ParseError<&'a str>>(f: F) -> impl Fn(&'a str) -> IResult<&'a str, O, E>
where
F: Fn(&'a str) -> IResult<&'a str, O, E>,
{
map(
alt((
tuple((tag("'"), f, tag("'"))),
tuple((tag("\""), f, tag("\"")))
)),
|(_, res, _)| res,
)
}
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,该解析器无法编译并出现“使用移动值”错误:
fn quoted<'a, F: 'a, O, E: ParseError<&'a str>>(f: F) -> impl Fn(&'a str) -> IResult<&'a str, O, E>
where
F: Fn(&'a str) -> IResult<&'a str, O, E>,
{
map(
alt((
tuple((tag("'"), f, tag("'"))),
tuple((tag("\""), f, …Run Code Online (Sandbox Code Playgroud)