小编Chr*_*imm的帖子

如何将Map [A​​,Future [B]]转换为Future [Map [A​​,B]]?

我一直在使用Scala Akka库并遇到了一些问题.正如标题所说,我需要转换Map[A, Future[B]]Future[Map[A,B]].我知道可以使用Future.sequence像Lists这样的Iterables,但在这种情况下这不起作用.

我想知道:在Scala中有一个干净的方法来进行这种转换吗?

scala future akka

29
推荐指数
3
解决办法
5563
查看次数

Scala:为什么List [=> Int]不起作用?

我一直在努力学习scala的来龙去脉,最近我遇到了一些我很好奇的东西.

据我所知,如果我想将一段有效延迟评估的代码传递给一个函数,(不进行现场评估)我可以输入:

def run(a: =>Int):Int = {...}
Run Code Online (Sandbox Code Playgroud)

从这个意义上说,函数run接收一个尚待评估的代码块,它会对其进行求值并返回计算出的Int of.然后我尝试将这个想法扩展到List数据结构.打字:

def run(a: List[=>Int]) = {...} 
Run Code Online (Sandbox Code Playgroud)

但是,这会返回错误.我想知道为什么这是不允许的.除了通过这种语法,我可以如何传递未评估的代码块列表?

scala lazy-evaluation

8
推荐指数
2
解决办法
253
查看次数

在scala中使用扁平元组的高阶操作

我最近遇到了一个问题.我试图以编译器友好的方式压扁"尾嵌套"元组,我想出了下面的代码:

implicit def FS[T](x: T): List[T] = List(x)
implicit def flatten[T,V](x: (T,V))(implicit ft: T=>List[T], fv: V=>List[T]) = 
  ft(x._1) ++ fv(x._2)
Run Code Online (Sandbox Code Playgroud)

以上代码适用于扁平元组,我称之为"尾嵌套",如下所示.

flatten((1,2)) -> List(1,2)
flatten((1,(2,3))) -> List(1,2,3)
flatten((1,(2,(3,4)))) -> List(1,2,3,4)
Run Code Online (Sandbox Code Playgroud)

但是,我试图让我的解决方案更加强大.考虑一个案例,我有一个这些高级"尾嵌套"元组的列表.

val l = List( (1,2), (1,(2,3)), (1,(2,(3,4))) )
Run Code Online (Sandbox Code Playgroud)

推断的类型签名就是这样List[(Int, Any)],这会对诸如以下操作造成问题map:

error: No implicit view available from Any => List[Int]

这个错误对我来说很有意义,因为flatten函数中我的递归隐式链的性质.但是,我想知道:有没有什么方法可以让我的方法使元组变得更加强大,以便更高阶的函数,比如map网格很好?

编辑:

正如Bask.ws指出的那样,产品特性提供了一个很好的解决方案的潜力.以下代码说明了这一点:

def flatten(p: Product): List[_] = p.productIterator.toList.flatMap {x => x match {
  case pr: Product => flatten(pr)
  case _ => List(x)
}} …
Run Code Online (Sandbox Code Playgroud)

scala tuples higher-kinded-types

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

析构函数调用(堆栈)变量之间的赋值?

matrix m1(5,5); 
matrix m2(5,5); 
m1 = matrix(m2); 
Run Code Online (Sandbox Code Playgroud)

对于上面的代码(对于任意类,矩阵),当m2的信息被复制到它时,是否会为与m1相关的信息调用析构函数?

c++ destructor lifetime

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

应用程序不拥有操作类型

我正在使用一个使用facebook opengraph的应用程序,通过相应的自定义操作将自定义对象发布到用户的墙上.在iOS环境中工作时,我正在尝试使用SDK函数调用:

- (FBRequest*)requestWithGraphPath:(NSString *)graphPath andParams:(NSMutableDictionary *)params andHttpMethod:(NSString *)httpMethod andDelegate:(id <KC_FBRequestDelegate>)delegate;

发布对象.我将GraphPath指定为:

"me/[APP_NAME]:[APP_ACTION]"
Run Code Online (Sandbox Code Playgroud)

并为Params提供了一个正确的访问令牌,api_key和url到要发布在用户墙上的对象.

然后我收到错误消息:

{"error":{"message":"(#100) Application does not own 479077275455517 action type","type":"OAuthException","code":100}}
Run Code Online (Sandbox Code Playgroud)

在Facebook的回应中.

任何见解?

objective-c opengraph ios

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

Java File IO vs Local database

我正在开发一个涉及快速解析大量数据的项目.目前,此数据位于磁盘上,并分解为目录层次结构:

(Folder: DataSource) -> (Files: Day1, Day2, Day3...Day1000...)
(Folder: DataSource2) -> (Files: Day1, Day2, Day3...Day1000...) 
...
(Folder: DataSource1000) -> ...
...
Run Code Online (Sandbox Code Playgroud)

每天文件包含需要非常快速访问的条目.

我最初的计划是在java中使用传统的FileIO来访问这些文件,但是经过进一步阅读,我开始担心这可能太慢了.

简而言之,从不同的DataSources和Days中选择性地从我的文件系统加载条目的最快方法是什么?

java database file-io

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

递归函数溢出,为什么?

以下功能溢出,我不明白为什么.当使用x作为0,y作为0并且dim作为2运行时,结果应为6.但是,我收到一个错误,指示函数中的某些Long值(x或y)在溢出时为554.这不应该是可能的,因为x和y都受昏暗值限制,在我的测试中它被设置为2.这是代码:

def lattice(dim: Long, x: Long, y: Long): Long = { 
  if (x == dim && y == dim) {
    1
  }
  if (x >= dim) {
    lattice(dim,x,y+1L)
  }
  if (y >= dim) {
    lattice(dim,x+1L,y)
  }
  else {
    lattice(dim,x+1L,y) + lattice(dim,x,y+1L)
  }
}
Run Code Online (Sandbox Code Playgroud)

recursion scala overflow

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

如何在scala中正确使用akka actor

我对演员的想法比较陌生,并且想知道我是否可以对我正在做的事情进行一些批评.对于项目的一部分,我需要有一个演员,告诉听众演员的时间.必须能够将倾听演员添加到此演员.

目前我有这个:

import akka.actor.Actor;

import akka.actor.ActorRef;
import com.github.nscala_time.time.Imports._;

class TimeManager extends Actor {
  var actors:List[ActorRef] = List();
  def receive = {
    case AdvanceTime() => actors foreach (_ ! DateTime.now)
    case AddListener(x) => actors =  x :: actors
  }
}
Run Code Online (Sandbox Code Playgroud)

有没有什么办法可以从这段代码中删除状态(var actors)以使其更具功能性?

scala actor akka

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