小编lee*_*777的帖子

用于指定类型参数的Scala中缀语法的名称是什么?

前几天我注意到了这个有趣的语法,用于指定Scala类的类型参数.

scala> class X[T, U]
defined class X

scala> new (Int X Int)
res1: X[Int,Int] = X@856447
Run Code Online (Sandbox Code Playgroud)

这种语法有名称吗?它的用例是什么?

syntax scala

15
推荐指数
2
解决办法
2186
查看次数

分发.pyc文件有什么限制?

我已经开始使用Python开发商业应用程序了,我正在权衡如何分发应用程序的选项.

除了显而易见的(分发具有适当商业许可证的来源)之外,我正在考虑仅分发.pyc没有相应.py来源的文件.但是我不太熟悉Python的兼容性保证,知道这是否可行,更不用说它是否是一个好主意.

.pyc文件是否独立于底层操作系统?例如,.pyc在64位Linux机器上生成的文件是否可以在32位Windows机器上运行?

我发现该.pyc文件应该与bugfix版本兼容,但主要和次要版本呢?例如,使用Python 3.1.5生成的文件是否与Python 3.2.x兼容?或者.pyc使用Python 2.7.3生成的文件是否与Python 3.x版本兼容?

编辑:

首先,我可能不得不安抚那些不愿意分发来源的利益相关者..pyc在没有来源的情况下分发可能会给他们一定程度的安慰,因为它需要额外的反编译步骤来获取来源,即使这一步有些微不足道.这足以让诚实的人保持诚实.

python pyc

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

Option包装值是一个好的模式吗?

我最近写了以下Scala:

val f: File = ... // pretend this file came from somewhere
val foo = toFoo(io.Source.fromFile(f).mkString)
Run Code Online (Sandbox Code Playgroud)

我真的不喜欢这种流动的方式.要了解发生了什么,你必须从f中间开始,向左fromFile阅读,向右mkString阅读,再向左阅读toFoo.啊.

特别是在习惯了序列的功能转换之后,这很难理解.我的下一次尝试看起来像这样:

val foo = Some(f)
  .map(io.Source.fromFile)
  .map(_.mkString)
  .map(toFoo)
  .get
Run Code Online (Sandbox Code Playgroud)

我喜欢这个更好的流程.你可以看到会发生什么这是一个很好的使用Option课程?还是我在滥用它?有没有更好的模式可以用来实现相同的流程?

scala

11
推荐指数
2
解决办法
2253
查看次数

使用Rails 4和结构化日志记录,如何将请求ID字段添加到日志中?

我正在向Rails 4应用程序添加结构化日志记录.使用本文中描述的logragelogstash-logger,我得到了大部分工作.

我在向日志添加请求ID时遇到问题.我发现最接近的是将其添加到config/${ENV}.rb:

config.log_tags = [:uuid]
Run Code Online (Sandbox Code Playgroud)

但是这会将请求ID添加到标记列表,而不是将其添加为命名字段.

{
  "tags": [
    "da76b4be-01ae-4cc4-8d3c-87062ea02cfe"
  ],
  "host": "services",
  "severity": "DEBUG",
  "@version": "1",
  "@timestamp": "2016-09-13T17:24:34.883+00:00",
  "message": "..."
}
Run Code Online (Sandbox Code Playgroud)

这是有问题的.它使得如何搜索特定的请求ID变得更加尴尬和不那么明显.另外,在logstash中解析消息它会覆盖已经与日志消息关联的任何其他标记.

有什么办法可以将请求ID作为命名字段添加到日志中吗?

{
  "request_id", "da76b4be-01ae-4cc4-8d3c-87062ea02cfe",
  "host": "services",
  "severity": "DEBUG",
  "@version": "1",
  "@timestamp": "2016-09-13T17:24:34.883+00:00",
  "message": "..."
}
Run Code Online (Sandbox Code Playgroud)

ruby logging ruby-on-rails logstash

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

在WebLogic中运行时ClassNotFoundException(HqlToken)

我有一个.war文件,用于通常在Jetty中正常运行的应用程序.

我正在尝试将应用程序移植到WebLogic中运行,但在启动时我遇到了以下异常:

ERROR:Foo - Error in named query: findBar
org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken [from Bar]
    at org.hibernate.hql.ast.HqlLexer.panic(HqlLexer.java:80)
    at antlr.CharScanner.setTokenObjectClass(CharScanner.java:340)
    at org.hibernate.hql.ast.HqlLexer.setTokenObjectClass(HqlLexer.java:54)
    at antlr.CharScanner.<init>(CharScanner.java:51)
    at antlr.CharScanner.<init>(CharScanner.java:60)
    at org.hibernate.hql.antlr.HqlBaseLexer.<init>(HqlBaseLexer.java:56)
    at org.hibernate.hql.antlr.HqlBaseLexer.<init>(HqlBaseLexer.java:53)
    at org.hibernate.hql.antlr.HqlBaseLexer.<init>(HqlBaseLexer.java:50)
    ...
Run Code Online (Sandbox Code Playgroud)

解决这个问题的最佳方法是什么?

我正在使用Hibernate 3.3.1.GA和WebLogic 10.3.2.0.

java orm hibernate weblogic

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

如何将Array [Node]转换为NodeSeq?

我正在尝试将Lift应用程序集成到一些现有的Java代码中.在我的一个片段中,我有一个Java对象Array,我需要将它映射到NodeSeq.我可以获得一个节点数组,但不能获得NodeSeq.(至少,不是以非常实用的方式).

import scala.xml.NodeSeq

// pretend this is code I can't do anything about
val data = Array("one", "two", "three")

// this is the function I need to write
def foo: NodeSeq = data.map { s => <x>{s}</x> }
//                          ^
// error: type mismatch;
//  found   : Array[scala.xml.Elem]
//  required: scala.xml.NodeSeq
Run Code Online (Sandbox Code Playgroud)

最干净的方法是什么?

scala lift scala-2.8

7
推荐指数
2
解决办法
4068
查看次数

Scala中的双包语句

我在一些库中看过,例如Spray,这样的双包规范:

package cc.spray
package http

// code
Run Code Online (Sandbox Code Playgroud)

这只是包装cc.spray.http的眼睛糖果,还是有一个功能上的好处,打破这两个分开?

scala package

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

蛋糕模式和类型

如何def someA(in trait B)使用trait AC#MyTypein中相同B?(然后A#MyType =:= B#MyType)

trait C {
  type MyType
}


trait A {
  self: C =>
  def doSomething(s: MyType) { println(s.toString)}
}

trait B {
  self: C =>  

  def someA: A
  def myType: MyType

  def action = someA.doSomething(myType)
}

// Mix part

case class Ahoy(value: String)

trait ConcreteC extends C {  
  type MyType = Ahoy
}


class PieceOfCake extends B with ConcreteC {
  val someA = …
Run Code Online (Sandbox Code Playgroud)

types scala cake-pattern

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

我如何一般地处理Scala集合?

我已经意识到我传递Scala集合的典型方式可以使用一些改进.

def doSomethingCool(theFoos: List[Foo]) = { /* insert cool stuff here */ }

// if I happen to have a List
doSomethingCool(theFoos)

// but elsewhere I may have a Vector, Set, Option, ...
doSomethingCool(theFoos.toList)
Run Code Online (Sandbox Code Playgroud)

我倾向于编写我的库函数来List作为参数类型,但我确信有一些更通用的东西我可以放在那里以避免.toList我在应用程序代码中偶尔的调用.这特别令人讨厌,因为我的doSomethingCool函数通常只需要调用map,flatMap并且filter在所有集合类型上定义.

对于那种"更普遍的东西",我有哪些选择?

collections scala

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

接口中的所有/大多数方法都应该返回Option吗?

是否一个好的做法是制作所有可能存在未来实现的接口(特征)方法,其中无效参数返回一个选项?

让我举个例子.如果我要实现具有特征的概率分布的库

trait Similarity {
   def getDensity(): Double
}
Run Code Online (Sandbox Code Playgroud)

由于大多数分布未在整个真实空间中定义,因此总是存在一些非法参数,例如高斯分布的非正方差.如果我理解正确的话,我应该回归Option[Double]而不是Double投掷IllegalArgumentException.

我认为大多数功能/计算都是如此.在这种情况下,什么是"最佳做法"?我担心这会让图书馆过于笨拙.

谢谢

functional-programming scala

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