我在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二进制数据.
在下面的代码中,是否可以在不使用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 项目,我在 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 默认值?
我在理解方面存在差距,我将不胜感激.
当我使用列表创建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) 如果这是重复的道歉,我在搜索时没有点击magic关键字.
我有一个项目,我拉入各种依赖项.其中一个(jooq)依赖于scala 2.10,而我的应用程序依赖于scala 2.11.x.
虽然一切都"有效",但我想更好地理解做这样的事情的运行时含义是什么?JVM将如何解决不同的依赖关系,以及我可以查看哪种类型的开销?
我试图确定是否值得分叉jooq,并将其编译为2.11(假设它将编译并在2.11下工作).
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/C++),有人可以解释线程本地存储吗?这只是一个允许线程控制自己变量的生命周期的技巧,还是编译器或硬件强制执行一些隔离/保护?
底层平台重要吗?
此外,相对于上述内容,普通 TLS 和“光纤安全”TLS 之间有什么区别?
抱歉,我用 google 搜索了,但我能找到的只是如何使用 TLS(我已经知道),但没有找到幕后的令人讨厌的细节。
例如,在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) 如果符合特定条件,我想复制列表并在复制时修改项目.是否有更好/更快/更惯用的方法来实现这一目标?
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) 我有一个具有相当复杂状态的演员,但让我们说它是一个列表.我想出了以下示例:
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?