小编mis*_*tor的帖子

如何正确键入 - 注释此HList?

sealed abstract trait HList

case class :+:[H, T <: HList](head: H, tail: T) extends HList {
  def :+:[T](v: T) = new :+:(v, this)
}

case object HNil extends HList {
  def :+:[T](v: T) = new :+:(v, this)
}

object HListExpt {
  def main(args: Array[String]) {
    val me: String :+: Int :+: Symbol :+: HNil.type = "Rahul" :+: 20 :+: 'Male :+: HNil
    println(me.head, me.tail.head)
  }
}
Run Code Online (Sandbox Code Playgroud)

在尝试编译上面的代码时,我得到以下编译器错误:

error: type mismatch;
found   : :+:[java.lang.String,:+:[Int,:+:[Symbol,object HNil]]]
required: :+:[String,:+:[Int,:+:[Symbol,HNil.type]]]
val me: String :+: …
Run Code Online (Sandbox Code Playgroud)

scala scala-2.8 hlist

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

关于类型类的问题

我需要定义一个类型类Field,如下所示:

trait Field[A] {  
  // Additive identity
  def zero: A

  // Multiplicative identity
  def one: A
}
Run Code Online (Sandbox Code Playgroud)

Numeric类型的类还提供了方法,zeroone.

我希望NumericField需要具有实例的类的任何地方都可以使用实例可用的每个类.例如,以下内容应该有效:

def func[F: Field](f: F) = println(f)
func(2)
Run Code Online (Sandbox Code Playgroud)

你能建议如何实现这个目标吗?我尝试了以下但它不起作用:

scala> implicit def numericToField[N](n: Numeric[N]) = new Field[N] {
     |     def zero = n.zero
     |     def one = n.one
     |   }
numericToField: [N](n: Numeric[N])java.lang.Object with Field[N]

scala> def func[F: Field](f: F) = println(f)
func: [F](f: F)(implicit evidence$1: Field[F])Unit

scala> func(2)
<console>:12: …
Run Code Online (Sandbox Code Playgroud)

scala implicit typeclass

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

使用方法丰富Scala集合

如何foreachWithIndex在Scala集合上添加方法?

这是我到目前为止所能提出的:

implicit def iforeach[A, CC <: TraversableLike[A, CC]](coll: CC) = new {
  def foreachWithIndex[B](f: (A, Int) => B): Unit = {
    var i = 0
    for (c <- coll) {
      f(c, i)
      i += 1
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这不起作用:

Vector(9, 11, 34).foreachWithIndex { (el, i) =>
  println(el, i)
}
Run Code Online (Sandbox Code Playgroud)

引发以下错误:

error: value foreachWithIndex is not a member of scala.collection.immutable.Vector[Int]
Vector(9, 11, 34).foreachWithIndex { (el, i) =>
Run Code Online (Sandbox Code Playgroud)

但是,当我明确应用转换方法时,代码可以正常工作:

iforeach[Int, Vector[Int]](Vector(9, 11, 34)).foreachWithIndex { (el, i) =>
  println(el, i) …
Run Code Online (Sandbox Code Playgroud)

scala implicit-conversion scala-collections enrich-my-library

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

如何使用Name作为应用程序?

scala> val a = Need(20)
a: scalaz.Name[Int] = scalaz.Name$$anon$2@173f990

scala> val b = Need(3)
b: scalaz.Name[Int] = scalaz.Name$$anon$2@35201f

scala> for(a0 <- a; b0 <- b) yield a0 + b0
res90: scalaz.Name[Int] = scalaz.Name$$anon$2@16f7209

scala> (a |@| b)
res91: scalaz.ApplicativeBuilder[scalaz.Name,Int,Int] = scalaz.ApplicativeBuilde
r@11219ec

scala> (a |@| b) { _ + _ }
<console>:19: error: ambiguous implicit values:
 both method FunctorBindApply in class ApplyLow of type [Z[_]](implicit t: scala
z.Functor[Z], implicit b: scalaz.Bind[Z])scalaz.Apply[Z]
 and value nameMonad in object Name of type => …
Run Code Online (Sandbox Code Playgroud)

monads functional-programming scala scalaz applicative

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

如何编写具有上下文边界的第一类函数,可以在使用站点干净地调用?

例如,假设我想编写一个length返回给定结构长度的函数,因为它Length在范围内有一个类型为class (来自Scalaz)的实例.

这就是我目前定义它的方式:

scala> def length[A, F[_] : Length]: F[A] => Int = _.len
length: [A, F[_]](implicit evidence$1: scalaz.Length[F])F[A] => Int
Run Code Online (Sandbox Code Playgroud)

然而,诸如length(List(2, 3))失败的调用因为在这种情况下隐式参数是所需的第一个参数.

scala> length(List(2, 3))
<console>:15: error: type mismatch;
 found   : List[Int]
 required: scalaz.Length[?]
              length(List(2, 3))
                         ^
Run Code Online (Sandbox Code Playgroud)

我认为length(implicitly)(List(2, 3))会起作用,但它最终导致崩溃(这种类型推断从左向右流动是可以理解的).提供显式类型注释有效,但它难以忍受.

scala> length(implicitly[Length[List]])(List(2, 3))
res16: Int = 2
Run Code Online (Sandbox Code Playgroud)

是否有一种编写第一类函数的好方法,例如length,具有上下文绑定,可以像使用站点上的常规函数​​一样干净地调用它?(像length(List(2, 3)))

scala typeclass scalaz

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

在文本文件中处理Unicode BOM的正确方法

我正在我的程序中读取一个文本文件,其中包含一些Unicode BOM字符\ufeff/ 65279位置.这在进一步解析中提出了几个问题.

现在我自己检测并过滤这些字符,但想知道Java标准库或Guava是否有办法更干净地完成这项工作.

java file-io character-encoding guava

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

在C#中,"is"关键字必须后跟一个类吗?

在Actionscript中,您可以让变量保存对类类型的引用,然后将类的实例与变量进行比较is.例:

var a:Foo = new Foo();
var type:Class = Foo;

if(a is type){  //this is true
  //do something
}
Run Code Online (Sandbox Code Playgroud)

你能用C#做类似的事吗?或者"is"关键字是否必须后跟一个类?

c# class

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

数组语言,如Scala中的代码重用

数组编程语言(也称为向量或多维语言)概括了对标量的操作,以透明地应用于向量,矩阵和更高维数组.

是否有可能在Scala中实现这种代码重用?

programming-languages scala

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

是否可以在scala中重载构造函数?

我的问题是,如果可以在scala中重载构造函数?

所以我可以编写如下代码:

var = new Foo(1)
var = new Foo("bar")
Run Code Online (Sandbox Code Playgroud)

如果不可能,有没有相同的技巧?

overriding scala

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

编写此代码的更好方法是什么?

我有以下代码,我觉得它因为重复而臭vi.我怎样才能更好地写出来?

vi = '([a-zA-Z0-9_\-\.]+)'

handlers = [
    (r'/register', RegistrationHandler),
    (r'/profiles/%s/%s' % (vi, vi), GetProfiles),
    (r'/archives/%s/%s/%s/%s' % (vi, vi, vi, vi), GetArchives),
    (r'/publish-profiles', PublishProfiles),
    (r'/publish-bundle/%s/%s' % (vi, vi), PublishBundle),
    (r'/upload-file/%s/%s/%s' % (vi, vi, vi), UploadFile),
    (r"/favicon\.ico", tornado.web.StaticFileHandler, dict(path=settings['static_path'])),
    ]
Run Code Online (Sandbox Code Playgroud)

python idioms

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