我一直在玩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) 我对两个actor,父 P和子 C进行了以下顺序操作:
context watch c)context unwatch c)c ! PoisonPill)我想知道的是; 我保证P 不会收到C的Terminated活动吗?
这是一段代码示例
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) 现在,我不确定这是否是一个愚蠢的问题,如果是的话,请耐心等待.
锁定对象是"递归的",即如果两个对象在其字段中引用了第三个对象,并且一个线程正在其中一个上运行同步方法,那么任何其他线程是否可以访问第三个对象?
// 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) 也许我正在咆哮错误的树(再次),但如果通常的做法是将一个属性输入为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(或者如果不是,那么我该怎么做)?
我们公司有一个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 …
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
在Eric Torreborre关于迭代器模式的本质论文的博文中,他描述了导线的笛卡尔积也是如何遍历.
任何人都可以使用scalaz库向我展示这个例子,因为我无法弄明白.让我们说问题是,对于List[Int]我想提供的两个:
Int列表中元素的总和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]使用其中一个或两个来遍历我.我想象一些代码有点像这样: …
我有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)]
但是,返回的地图没有排序!!
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它可以从一个Reducer或chain一个填充.
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)