Clojure有"线程宏" ->和->>.我很确定在Scala代码中可以使用类似的构造来替换代码,例如:
var myObj = MyObject(x, y, z)
myObj = transform(myObj, abc)
myObj = transformMore(myObj, def)
myObj = transformYetMore(myObj, bar)
Run Code Online (Sandbox Code Playgroud)
我希望看到一个可行的例子,看看它是否看起来不错.我很确定你不需要在Scala案例中使用宏.
Play Framework的iteratee库定义了一个方法Enumerator.fromCallback,允许根据Future的结果生成元素:
http://www.playframework.com/documentation/2.2.x/Enumerators
def fromCallback[E](
retriever: () => Future[Option[E]],
onComplete: () => Unit = () => (),
onError: (String, Input[E]) => Unit = (_: String, _: Input[E]) => ()
): Enumerator[E]
Run Code Online (Sandbox Code Playgroud)
您可以在此处看到用于从Web服务提供分页结果的一个很好的示例:
http://engineering.klout.com/2013/01/iteratees-in-big-data-at-klout/
def pagingEnumerator(url:String):Enumerator[JsValue]={
var maybeNextUrl = Some(url) //Next url to fetch
Enumerator.fromCallback[JsValue] ( retriever = {
val maybeResponsePromise =
maybeNextUrl map { nextUrl=>
WS.url(nextUrl).get.map { reponse =>
val json = response.json
maybeNextUrl = (json \ "next_url").asOpt[String]
val code = response.status //Potential error handling here
json
} …Run Code Online (Sandbox Code Playgroud) 我正在使用Angular和Angular-UI ui-router.我有一些定义的状态:
app.config(function ($stateProvider, $urlRouterProvider) {
$stateProvider
.state('tabs', {
url: "/tab",
abstract: true,
templateUrl: "views/tabs.html"
})
.state('tabs.home', {
url: "/home",
views: {
'home-tab': {
templateUrl: "views/home.html"
}
}
});
Run Code Online (Sandbox Code Playgroud)
请注意,我使用的是抽象状态.是否有一个方便的功能,通过名称获取给定状态的URL?例如,我想要类似的东西:
$state.get('tabs.home').absoluteUrl
Run Code Online (Sandbox Code Playgroud)
哪个应该返回一个值#/tab/home.
假设我有一个带有多个类型参数的def:
def foo[A, B, C](b: B, c: C)(implicit ev: Writer[A])
但是,预期的用法是类型参数B,C应该推断(基于传入的参数).并且调用者应该只需要A明确指定(例如,具有由编译器选择的适当隐式).不幸的是,Scala只允许调用者指定所有类型参数或不允许任何类型参数.从某种意义上说,我希望咖喱的类型参数:
def foo[A][B, C]...
在Scala中有一些技巧可以实现吗?
(如果我的具体例子没有完全合理,我很乐意通过建议改进它.)
我有一个小 Java 程序。我使用 Graal 构建了一个二进制文件native-image(即 GraalVM AOT 又名 SubstrateVM)。
我的程序可以使用 Java 运行时或本地映像二进制文件执行。判断我正在运行的上下文的最佳方法是什么?
(一般来说,这可能是一种不好的做法,但我相信在某些并不少见的情况下这是不可避免的/必要的。)
如果列表不为空,scala或scalaz中是否有函数将函数应用于列表.否则它会返回一些默认值.该函数必须应用于列表本身而不是列表的元素.也就是说,它完成以下任务:
implicit class RichList[A, M[A] <: Iterable[A]](list: M[A]) {
def convertOrElse[B](fn: M[A] => B, whenEmpty: B) = {
if (!list.isEmpty) fn(list) else whenEmpty
}
}
Run Code Online (Sandbox Code Playgroud)
用法示例:mylist.convertOrElse("prefix"+ _.mkString(","),"")
我记得在某个地方看过这个,但它可能是在博客文章或其他一些.我现在似乎无法在scalaz中找到它,但我甚至无法在网上找到最新的scalaz文档(这是一个不同的问题:)
正如你所看到的,我已经编写了我自己的隐含,但是我讨厌在适当的scalaz导入可以解决这个问题时添加我自己的含义.