小编oxb*_*kes的帖子

使用Scalaz.ListW.<^>键入推断问题

我一直在玩ListW.<^>,其定义如下:

def <^>[B: Zero](f: NonEmptyList[A] => B): B = value match {
  case Nil => ?
  case h :: t => f(Scalaz.nel(h, t))
}
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何Option选择Zero这个例子的类型

scala> case class CC(v : Int)
defined class CC

scala> val posns = List(CC(2), CC(5), CC(1))
posns: List[CC] = List(CC(2), CC(5), CC(1))
Run Code Online (Sandbox Code Playgroud)

所以现在我有了这些东西的清单.我的目标是,如果没有低于零的值且类似于Option[CC]最大值,则返回最小值/最大值posns,我获得None最小值.

scala> import scalaz._; import Scalaz._
import scalaz._
import Scalaz._

scala> implicit val CCOrder = new Order[CC] { 
       | def order(v1 …
Run Code Online (Sandbox Code Playgroud)

scala type-inference scalaz

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

Akka环境观察/ unwatch发生在之前的关系

我对两个actor, P C进行了以下顺序操作:

  1. PC(context watch c)
  2. P unwatches C(context unwatch c)
  3. P优雅地停止C(c ! PoisonPill)

我想知道的是; 我保证P 不会收到CTerminated活动吗?

这是一段代码示例

class HappensBefore extends App {
  class C extends Actor { def receive = {} } 
  class P extends Actor {
    val c = context actorOf Props[C]
    context watch c
    context unwatch c
    c ! PoisonPill
    def receive = { case …
Run Code Online (Sandbox Code Playgroud)

concurrency scala actor akka happens-before

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

Java:除了它们所属的对象之外,同步方法是否锁定了什么?

现在,我不确定这是否是一个愚蠢的问题,如果是的话,请耐心等待.

锁定对象是"递归的",即如果两个对象在其字段中引用了第三个对象,并且一个线程正在其中一个上运行同步方法,那么任何其他线程是否可以访问第三个对象?

// a and b are some objects that implement Runnable
// they both reference the same third object
a.ref = c;
b.ref = c;

// a is run in a thread and processes some data in a loop for a long time
// the method the loop belongs to is declared synchronized
threadA = new Thread(a);
threadA.start();

a.someSyncedMethod(); // this would block ...
b.ref.someOtherSyncedMethod(); // ... but would this?
a.ref.someOtherSyncedMethod(); // ... and how about this?
Run Code Online (Sandbox Code Playgroud)

java concurrency mutex semaphore locking

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

从可迭代创建集合时,我是否必须转换为Seq?

也许我正在咆哮错误的树(再次),但如果通常的做法是将一个属性输入为a scala.collection.immutable.Set[A],那么你将如何创建其中一个给定的scala.Iterable[A]?例如:

class ScalaClass {
    private var s: scala.collection.immutable.Set[String]

    def init(): Unit = {
        val i = new scala.collection.mutable.HashSet[String] 
        //ADD SOME STUFF TO i

        s = scala.collection.immutable.Set(i) //DOESN'T WORK

        s = scala.collection.immutable.Set(i toSeq : _ *) //THIS WORKS
    }
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么有必要通过a创建不可变集Seq(或者如果不是,那么我该怎么做)?

scala scala-collections

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

来自Java的kerberos - 为当前经过身份验证的用户获取主题

我们公司有一个kerberos域,我正在运行一些Java/Kerberos 示例.我的问题是从服务器的角度来看登录机制.在运行服务器示例时GssServer.java,我需要得到一个javax.security.auth.Subject; 在提供的代码中,这是通过LoginContext这样的:

// Create a LoginContext with a callback handler and login
LoginContext context = new LoginContext(name, new TextCallbackHandler());
context.login();

Subject subject = context.getSubject();
Run Code Online (Sandbox Code Playgroud)

这一切都很好,当我运行示例时,我看到一个可爱的登录提示.但是我的问题是,这不是我的服务器的运行方式,也不是我如何理解我应该如何在kerberos域内提供服务.在该GssServer示例中,问题是我的服务器(读取:服务)不应该向其自身进行身份验证KDC,以便向客户端提供其服务.访问服务器端keytab文件应该足以执行此操作.所以对于示例配置:

//jaas-krb5.conf
server {
    com.sun.security.auth.module.Krb5LoginModule required
    useKeyTab=true
    storeKey=true
    keyTab="/home/myusr/my-server.keytab"
    principal="myserv/mymachine.some.domain";
};
Run Code Online (Sandbox Code Playgroud)

并在Java代码中:

GSSManager manager = GSSManager.getInstance();
Oid krb5Mechanism = new Oid("1.2.840.113554.1.2.2");
GSSName gssName = manager.createName("myserv/mymachine.some.domain@THE.REALM.COM", 
                                     GSSName.NT_HOSTBASED_SERVICE);
GSSCredential serverCreds = manager.createCredential(gssName,
                                     GSSCredential.DEFAULT_LIFETIME,
                                     krb5Mechanism,
                                     GSSCredential.ACCEPT_ONLY);
Run Code Online (Sandbox Code Playgroud)

这样做的问题是文件中的server信息jaas-krb5.conf …

java security kerberos

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

为什么我在这个Scala中得到java.nio.BufferUnderflowException

我试图在Scala中编写一些脚本来处理一些日志文件:

scala> import io.Source
import io.Source

scala> import java.io.File
import java.io.File

scala> val f = new File(".")
f: java.io.File = .

scala> for (l <- f.listFiles) {
 |   val src = Source.fromFile(l).getLines
 |   println( (0 /: src) { (i, line) => i + 1 } )
 | }
3658
java.nio.BufferUnderflowException
        at java.nio.Buffer.nextGetIndex(Unknown Source)
        at java.nio.HeapCharBuffer.get(Unknown Source)
        at scala.io.BufferedSource$$anon$2.next(BufferedSource.scala:86)
        at scala.io.BufferedSource$$anon$2.next(BufferedSource.scala:74)
        at scala.io.Source$$anon$6.next(Source.scala:307)
        at scala.io.Source$$anon$6.next(Source.scala:301)
        at scala.Iterator$cla...
Run Code Online (Sandbox Code Playgroud)

为什么我这样做java.nio.BufferUnderflowException

注意 - 我正在处理10个日志文件,每个文件大小约为1MB

file-io scala bufferunderflowexception

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

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

笛卡尔积在斯卡拉兹中

Eric Torreborre关于迭代器模式的本质论文的,他描述了导线的笛卡尔积也是如何遍历.

任何人都可以使用scalaz库向我展示这个例子,因为我无法弄明白.让我们说问题是,对于List[Int]我想提供的两个:

  1. Int列表中元素的总和
  2. List[String]其中的元件通过附加"Z"到的String表示创建的Int小号

我的理解是,我可以使用traverse这种方式,但只是实际遍历我的结构一次,不像这个解决方案:

val xs = List(1, 2, 3, 4)
val (sum, strings)  = (xs.sum, xs map (_.toString + "Z"))
Run Code Online (Sandbox Code Playgroud)

注1 - 我知道还有其他方法可以做到这一点,我不需要遍历这个例子,也不一定是最简单的解决方法.但是,我试图理解遍历,所以我真的在寻找所述问题的答案


编辑 - 感谢missfaktor下面显示如何使用State.我想我想知道的是我如何编写两个独立的计算.例如; 我的职能在概念上如下:

val shape = (_ : List[Int]) map (_.toString + "Z")
val accum = (_ : List[Int]).sum
Run Code Online (Sandbox Code Playgroud)

我希望这些累积机制彼此独立,然后选择是否List[Int]使用其中一个两个来遍历我.我想象一些代码有点像这样: …

functional-programming scala traversal scalaz

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

按值排序地图

我有List[(String,String)],我需要按第二个值对它们进行排序并返回一个地图

我做了以下事情:

val newMap = list.sortBy(_._2).foldLeft(Map.empty[String, String]) {
      (map, key) ? map + (key._1 ? key._2)
    }
Run Code Online (Sandbox Code Playgroud)

列表是一个 List[(String,String)]

但是,返回的地图没有排序!!

scala

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

虚拟类型和数字的模糊含义

Welcome to Scala version 2.10.2 (Java HotSpot 64-Bit Server VM, Java 1.7.0_15).

scala> :paste
// Entering paste mode (ctrl-D to finish)

trait Reduce { type X; def add(x:X) }
Run Code Online (Sandbox Code Playgroud)

我现在宣布一个类,Foo它可以从一个Reducerchain一个填充.

class Foo[A](val a:A) {
  def fill(r: Reduce { type X = A}) = {r.add(a)}
  def chain[R >:A](r: Reduce { type X = R }) = { r.add(a); new Foo(r)}
}
Run Code Online (Sandbox Code Playgroud)

我现在创建一个类,它是某种数字类型的reducer Y

class AsInt[Y: Numeric] extends Reduce { 
  type X = Y
  var i …
Run Code Online (Sandbox Code Playgroud)

types scala

5
推荐指数
0
解决办法
433
查看次数