编写可以在.NET(windows)和Mono(linux)上交叉编译的代码的最佳实践是什么?虽然我对.NET非常熟悉,但我对Mono及其所有问题都没有经验.有没有人看过关于这个的好博客文章或最佳实践论文,我还没有能够挖掘出来?我会坚持使用C#3.0级别的功能.
与我有关的事情首先是Interop,因为我需要调用一些本机代码.接下来是处理名称空间的最佳方法,例如Mono.XXX.我应该使用一堆#if吗?隔离每个平台程序集中的代码?
任何有关建筑和设计的建议都将不胜感激!如果你在visual studio(任何版本)的Linux/Mono交叉编译方面有任何经验,我也会对此感兴趣.
我正在尝试Akka-http,希望有人可以解释以下问题:
如何根据请求中的accept:标头创建不同的路由?例如,我想要一个代码路径来处理"json",一个代码来处理"xml"请求(如果缺少头,则默认为"json")
如果我不希望推断出contentType,我该如何指定它?例如,在下面的代码中,我尝试通过compactPrint()运行json,但这会将其更改为字符串,因此为"text/plain".我想覆盖它并告诉客户端它仍然是json.
我的代码是这样的;
...
path("api") {
get {
complete {
getStuff.map[ToResponseMarshallable] {
case Right(r) if r.isEmpty => List[String]().toJson.compactPrint
case Right(r) => r.toJson.compactPrint
case Left(e) => BadRequest -> e
}
}
}
}
...
Run Code Online (Sandbox Code Playgroud)
这种情况下的响应是text/plain,因为compactPrint创建了一个字符串.批评非常欢迎.;)
我创建了一个实现ProcessGroupPolicyEx的组策略扩展.当我收到团体政策时,我会被通知.
然而,我对如何从GPO内部阅读政策感到茫然.该示例在循环遍历GPO时停止:
for( pCurGPO = pChangedGPOList; pCurGPO; pCurGPO = pCurGPO->pNext )
{
if( *pbAbort )
{
// Abort.
break;
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
这很好,但我如何获得pCurGPO中的策略(实际设置)?我需要获取此GPO包含的设置,或者存储它们的注册表项.这是因为我创建了多个针对我的扩展的ADMX模板,所以我需要区分它们.
到目前为止,我已经找到了一些示例,但他们认为扩展程序事先知道哪些注册表将被更改.但是,在我的情况下,我不希望扩展程序做出这个假设,我希望它检查更新的GPO并确切地确定要更改的内容.
任何指针都将非常感激.
我知道WPF有一个"CenterScreen"值,用于在桌面上居中一个窗口.但是,在双显示器上,这不是很愉快.
我如何以主显示器为中心?我是否需要经历检测主桌面,获取其几何图形等的歌曲和舞蹈,还是有更好的方法?
我是一个新手,所以希望有一些耐心.:)
如果某个值不存在,我会尝试填充两个表.基本上我有:
TABLE b
(
id VARCHAR(254) PRIMARY KEY NOT NULL
);
TABLE d
(
id VARCHAR(254) PRIMARY KEY NOT NULL,
relay INT NOT NULL,
FOREIGN KEY ( relay ) REFERENCES b ( id )
);
Run Code Online (Sandbox Code Playgroud)
所以我正在尝试编写一个函数,用一个新值填充两个表,如果它不存在,或者忽略它,否则......当然包含在一个事务中:
IF (NOT EXISTS(SELECT * FROM b where id='something'))
insert into b values('something')
insert into d values(1, 'something')
END
Run Code Online (Sandbox Code Playgroud)
实现这样的目标最有效的方法是什么?如果重要的是我正在使用POstgreSQL 9.1,但我想保持它相当通用.
(编辑)这些是我当前的表格defs(为简化说明而简化):
object d extends Table[(String, String, Int)]("d")
{
def id=column[String]("id", O.PrimaryKey)
def relay=column[Int]("relay")
def relay_ref=foreignKey("d2b.fk", relay, b)(_.id)
def * = id ~ relay …
Run Code Online (Sandbox Code Playgroud) 我有几个对象,我正在尝试编写工厂方法.
简化,这些是:
case class a[a1,a2](j:a1, k:a2) {}
case class b[b1,b2](j:b1, k:b2) {}
Run Code Online (Sandbox Code Playgroud)
我想创建一个方法,允许我传入类型,并获得该类的实例.我想尝试这样的事情:
class myfactory[T] {
def make[K,L](p1: K, p2: L): T[K,L] = {
new T(p1,p2)
}
}
Run Code Online (Sandbox Code Playgroud)
这显然不起作用(由于各种原因,包括'T不能参数'),但有没有一个优雅的解决方案来创建这样的东西?
我很好奇这样做的正确方法.假设我想通过方法发出成功或失败的信号.这是否可以接受,如果在成功的情况下除了成功之外没有什么我想说的话?
def fn(): Either[Throwable, Unit]
Run Code Online (Sandbox Code Playgroud)
从这个方法返回Right()的正确方法是什么?显然只是返回Right()给出了一个弃用警告(插入()的参数列表的改编已被弃用).
我也可以做Option [Throwable],但这并不符合我如何阅读Option的精神.或者可能返回scala.util.Try的结果并评估成功/失败?
- 关于弃用警告,仅供参考.
Welcome to Scala 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_101).
Type in expressions for evaluation. Or try :help.
scala> def fn:Either[Throwable, Unit] = { Right() }
<console>:11: warning: Adaptation of argument list by inserting () has been deprecated: this is unlikely to be what you want.
signature: Right.apply[A, B](b: B): scala.util.Right[A,B]
given arguments: <none>
after adaptation: Right((): Unit)
def fn:Either[Throwable, Unit] = { Right() }
^
fn: Either[Throwable,Unit]
Run Code Online (Sandbox Code Playgroud) 我试图以更实际的方式理解monad和monoids之间的关系.如果这个问题毫无意义,我会提前道歉,我还在苦苦挣扎.
例如,假设我有:
trait Monoid[T] {
def zero: T
def combine: (T,T) => T
}
Run Code Online (Sandbox Code Playgroud)
和(从这里):
trait Monad[+M[_]] {
def unit[A](a: A): M[A]
def bind[A, B](m: M[A])(f: A => M[B]): M[B]
}
Run Code Online (Sandbox Code Playgroud)
是否可以在Monad和Monoid特征之间建立关系,例如我可以将Monad视为Monoid(假设我正确理解Monad是Monoid的特例)?
假设我有这个代码:
def a(x:Int,y:Int):Int = x+y
def b:(Int,Int) = (1,2)
Run Code Online (Sandbox Code Playgroud)
我想完成:
a(b)
Run Code Online (Sandbox Code Playgroud)
这样做的正确方法是什么?还有更有效的方法调用预定义的多参数函数 - 在我的情况下8 - 与另一个函数的结果?
我的akka-streams还在继续学习.我想将我的akka-streams应用程序与akka-cluster和DistributedPubSubMediator集成.
添加对Publish的支持是相当直接的,但订阅部分我遇到了麻烦.
作为参考,订户在Typesafe样本中给出如下:
class ChatClient(name: String) extends Actor {
val mediator = DistributedPubSub(context.system).mediator
mediator ! Subscribe("some topic", self)
def receive = {
case ChatClient.Message(from, text) =>
...process message...
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,我应该如何将这个演员与我的流程集成,如何在没有流背压的情况下确保我获得发布消息?
我正在尝试完成一个pubsub模型,其中一个流可以发布消息而另一个流将使用它(如果订阅).