小编Wil*_* Am的帖子

Scala位域序列化

我在Scala非常新,我对位操作功能感到困惑.我希望有人可以指出我正确的方向?

我有一个使用以下位字段定义的字节数组:

0-3 - magic number
  4 - version
5-7 - payload length in bytes
8-X - payload, of variable length, as indicated in bits 5-7
Run Code Online (Sandbox Code Playgroud)

我想将这个来回序列化为一个结构,例如:

MagicNumber: Integer
Version: Integer
Length: Integer
payload: Array[Byte]
Run Code Online (Sandbox Code Playgroud)

你如何以最佳方式处理这种情况?我见过的大多数示例都涉及更高级别的序列化,例如JSON.我想在这种情况下序列化和反序列化TCP二进制数据.

scala binary-serialization

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

Scala转换并避免asInstanceOf

在下面的代码中,是否可以在不使用asInstanceOf的情况下重新表示?我找到了一些样式指南建议asInstanceOf/isInstanceOf应该避免,我设法清理我的代码,除了下面显示的用法.

我确实在这里找到了一个重复的问题,但它对于这个特殊情况并没有真正帮助我,或者我只是太初学者将它翻译成我自己的用例.

trait pet {}
class dog extends pet {
  def bark: String = {
    "WOOF"
  }
}

def test(what: pet) : String =
{
  what match {
    case _:dog =>
      val x = what.asInstanceOf[dog]
      x.bark
  }
}

test(new dog())
Run Code Online (Sandbox Code Playgroud)

我试过例如:

val x = what : dog
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用.

scala

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

Akka:缺少 akka.version

我有一个 Scala 项目,我在 IntelliJ 中运行良好,运行/调试配置设置为应用程序,现在我想创建一个 jar 来使用“java -jar .jar”运行它。这是一个 Maven 项目,而不是 SBT。

我有三个模块,包括所有其他模块的顶层模块在资源文件夹中有一个 reference.conf。这是一个最小的 application.conf,而不是很多设置。另一个模块有自己的reference.conf。

我基于我的顶级模块创建了一个工件,并构建它来创建一个 jar。当我用java执行它时

Exception in thread "main" java.lang.ExceptionInInitializerError
    at com.se.pd.Main.main(Main.scala)
Caused by: com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'akka.version'
    at com.typesafe.config.impl.SimpleConfig.findKey(SimpleConfig.java:124)
    at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:145)
    at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:151)
    at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:159)
    at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:164)
    at com.typesafe.config.impl.SimpleConfig.getString(SimpleConfig.java:206)
    at akka.actor.ActorSystem$Settings.<init>(ActorSystem.scala:168)
    at akka.actor.ActorSystemImpl.<init>(ActorSystem.scala:504)
    at akka.actor.ActorSystem$.apply(ActorSystem.scala:141)
    at akka.actor.ActorSystem$.apply(ActorSystem.scala:118)
    at com.se.pd.ServiceMain$class.$init$(ServiceMain.scala:25)
    at com.se.pd.Main$.<init>(Main.scala:17)
    at com.se.pd.Main$.<clinit>(Main.scala)
Run Code Online (Sandbox Code Playgroud)

当我解压缩文件时,我在根目录中看到了合并的 reference.conf。

我错过了什么?创建 ActorSystem 时是否需要做一些特定的事情?我尝试删除我的所有配置文件并使用所有默认值运行,但它仍然不起作用,尽管在这种情况下,错误从抱怨“akka.version”变为抱怨“akka”。所以感觉有点像我只是没有加载 akka 默认值?

scala akka

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

流利的Nhibernate HasMany

我在理解方面存在差距,我将不胜感激.

当我使用列表创建HasMany关系时,nhibernate在我的子表上创建一个"索引"列.如果我使用连接查询表,它会崩溃"收集时的空索引"

我不理解的是 - 这个"索引"列是如何管理/填充的?

我的相关代码:

家长(产品)

  Class:
       public class License
       {
             ...
             public virtual IList<License>  Licenses { get; set; }
             public Product()
             {
                Licenses = (IList<License>)new List<License>();
             }
       }

   Mapping:

    HasMany<License>(x => x.Licenses)
        .Inverse()
        .Not.LazyLoad()
        .AsList()
        .Cascade.AllDeleteOrphan()
        .ForeignKeyCascadeOnDelete()
        .KeyNullable()
        .KeyColumn("Product_ID")
Run Code Online (Sandbox Code Playgroud)

儿童(执照):

  Class:
       public class License
       {
             ...
             public virtual Product_ID {get; set;}
       }

  Mapping: 


    ...
    References<Product>(x => x.Product_ID)
        .Column("ParentProduct");
    ...
Run Code Online (Sandbox Code Playgroud)

我的加入:

   criteria.Add(Restrictions.Disjunction()
                        .Add(Restrictions.Like("Name", kw))
                        .Add(Restrictions.Like("Description", kw)))
                        .CreateAlias("Licenses", "License",   NHibernate.SqlCommand.JoinType.LeftOuterJoin);
Run Code Online (Sandbox Code Playgroud)

我最终得到:

[HibernateException: null index column for collection: Test.Licenses]
   NHibernate.Persister.Collection.AbstractCollectionPersister.ReadIndex(IDataReader rs, …
Run Code Online (Sandbox Code Playgroud)

nhibernate fluent-nhibernate

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

同一项目中的多个scala版本

如果这是重复的道歉,我在搜索时没有点击magic关键字.

我有一个项目,我拉入各种依赖项.其中一个(jooq)依赖于scala 2.10,而我的应用程序依赖于scala 2.11.x.

虽然一切都"有效",但我想更好地理解做这样的事情的运行时含义是什么?JVM将如何解决不同的依赖关系,以及我可以查看哪种类型的开销?

我试图确定是否值得分叉jooq,并将其编译为2.11(假设它将编译并在2.11下工作).

jvm scala

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

流利的nhibernate - 在一个表中存储和检索三个类

Noob问题.

我有这种情况,我有这些对象:

class Address
{      
   string Street;
   string City;
   ...
}

class User
{
   string UserID;
   Address BillingAddress;
   Address MailingAddress;
   ...
}
Run Code Online (Sandbox Code Playgroud)

使用(流畅的)nHibernate存储这些数据的正确方法是什么?我可以使用一个单独的地址表并创建一个引用,但它们是1:1的关系,所以我真的不想招致连接的开销.理想情况下,我会将其存储为单个平面记录.

所以,我的问题是,以这样一种方式存储"用户"类实例的正确方法是什么,它将其内容以及两个地址存储为单个记录?我的知识让我失去了如何以两种地址记录获得不同列名(例如BillingAddress_Street和MailingAddress_Street)的方式存储此信息,以及如何将记录读回用户实例.

c# fluent-nhibernate

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

线程本地存储/Windows

给定本机代码(C/C++),有人可以解释线程本地存储吗?这只是一个允许线程控制自己变量的生命周期的技巧,还是编译器或硬件强制执行一些隔离/保护?

底层平台重要吗?

此外,相对于上述内容,普通 TLS 和“光纤安全”TLS 之间有什么区别?

抱歉,我用 google 搜索了,但我能找到的只是如何使用 TLS(我已经知道),但没有找到幕后的令人讨厌的细节。

windows winapi multithreading thread-local-storage

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

在scala中,如何从不同的输入实例化一个类?

例如,在C++中我可以做类似的事情:

class  x {
     int _a;
     int _b;
     int _c;
    public:
       x(int a, int b, int c) { _a = a; _b = b; _c = c; }
       x(y& other) {
                   sometype z = deserialize(y)
                   // ...do some magic
                   _a = z.a; _b = z.b; _c = z.c;
       }

}
Run Code Online (Sandbox Code Playgroud)

所以我可以从离散参数(3个int)实例化(x),或者定义一个构造函数,我接受(y)的实例,反序列化它,并从中提取数据.

在scala我希望有这个,这是行不通的,因为在调用主构造函数之前我没有别的东西

case class x (int a, int b, int c) { 
   def this(from:y ) { 
   val z = deserialize(x);  // this will fail
   // do some magic; 
   this(z.a, z.b, …
Run Code Online (Sandbox Code Playgroud)

scala

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

如何在复制时修改集合中与谓词匹配的元素?

如果符合特定条件,我想复制列表并在复制时修改项目.是否有更好/更快/更惯用的方法来实现这一目标?

class Animal(val t: String, val n : String) {}

val farm =  List[Animal](
  new Animal("pig","squeeky"),
  new Animal("chicken","clucker"),
  new Animal("fox","grr"),
  new Animal("chicken","clucky"),
  new Animal("chicken","cluckster"))

// i want to replace 'fox' with 'deadfox'
val safefarm = farm.map(n => {
  if (n.t == "fox")
    new Animal("deadfox","")
  else n
})

farm.map(_.t)
// res4: List[String] = List(pig, chicken, fox, chicken, chicken)

safefarm.map(_.t)
// res5: List[String] = List(pig, chicken, deadfox, chicken, chicken)
Run Code Online (Sandbox Code Playgroud)

scala scala-collections

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

如何在里面用可变集合模拟actor?

我有一个具有相当复杂状态的演员,但让我们说它是一个列表.我想出了以下示例:

class Account
class Bank extends Actor {
  var accounts = List[Account]()
  def receive = {
    case x: Account =>
      accounts ++= List(x)
      println(accounts.length)
    case _ => 
  }
}
Run Code Online (Sandbox Code Playgroud)

基本上我希望这个actor包装List,我希望能够通过以下方式添加到该集合:

val system = ActorSystem("banks")
val bankActor = system.actorOf(Props[Bank], name = "mybank")
bankActor ! new Account
Run Code Online (Sandbox Code Playgroud)

我写这个演员甚至接近最佳和安全吗?有没有更好的方法,没有引入var?

scala akka

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