标签: seq

Lift Framework无法反序列化JSON数据

我正在尝试使用Lift框架反序列化JSON文本,并且它们似乎不支持Seq特征(尽管支持List).举个例子...

一些代表员工的JSON数据(名字和姓氏)......

{"employees":[{"fname":"Bob","lname":"Hope"},{"fname":"Bob","lname":"Smith"}]}
Run Code Online (Sandbox Code Playgroud)

这是员工域对象:

case class Employee(fname: String, lname: String) { }
case class Employees(employees: Seq[Employee]) { }
Run Code Online (Sandbox Code Playgroud)

这是我的JSON反序列化代码......

class EmployeeTest { 

  @Test def test() {
     val jsonText: String = ....
     val e = deserialize(jsonText)
  }

  def deserialize(in: String): Employees = {
    implicit val formats = net.liftweb.json.DefaultFormats
    net.liftweb.json.Serialization.read[Employees](in)
  }
}
Run Code Online (Sandbox Code Playgroud)

如果我将Employees域对象更改为使用List而不是Seq,那么它可以工作.但是如果可以的话,我真的很想使用Seq.

这是我在运行上面的代码时看到的异常(使用Seq):我能做些什么来让它工作吗?谢谢你的帮助!

net.liftweb.json.MappingException: unknown error
    at net.liftweb.json.Extraction$.extract(Extraction.scala:43)
    at net.liftweb.json.JsonAST$JValue.extract(JsonAST.scala:288)
    at net.liftweb.json.Serialization$.read(Serialization.scala:50)
    at EmployeeTest.deserialize(EmployeeTest.scala:20)   
    at EmployeeTest.test(EmployeeTest.scala:13)
Caused by: java.lang.UnsupportedOperationException: tail of empty list
    at scala.collection.immutable.Nil$.tail(List.scala:388)
    at scala.collection.immutable.Nil$.tail(List.scala:383)
    at net.liftweb.json.Meta$Constructor.bestMatching(Meta.scala:60)
    at net.liftweb.json.Extraction$.findBestConstructor$1(Extraction.scala:187) …
Run Code Online (Sandbox Code Playgroud)

json scala list lift seq

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

在F#中的序列表达式中键入推断

我想我不太明白F#如何推断序列表达式中的类型以及为什么类型不能正确识别,即使我直接从"seq"指定了元素的类型.

在下面的F#代码中,我们有一个基类A和两个派生类,B和C:

type A(x) =
    member a.X = x

type B(x) =
    inherit A(x)

type C(x) =
    inherit A(x)
Run Code Online (Sandbox Code Playgroud)

如果我尝试用简单的序列表达式"产生"它们的实例,我会得到两个错误:

// Doesn't work, but it makes sense.
let testSeq = seq {
    yield A(0)
    yield B(1) // Error, expected type: A
    yield C(2) // Error, expected type: A
}
Run Code Online (Sandbox Code Playgroud)

这是有道理的,因为推断"常见"类型(界面,我认为,可以使这项工作更加困难)可能并不那么简单.但是,可以使用安全转换来修复这些错误:

// Works fine :)
let testSeqWithCast = seq {
    yield A(0)
    yield B(1) :> A
    yield C(2) :> A
}
Run Code Online (Sandbox Code Playgroud)

如果我不想使用演员怎么办?我试图直接从"seq"指定序列类型,但事情似乎不起作用:

// Should work, I think...
let testGenSeq = seq<A> …
Run Code Online (Sandbox Code Playgroud)

generics f# types inference seq

9
推荐指数
2
解决办法
520
查看次数

在F#中拆分seq

我应该分割seq<a>seq<seq<a>>由所述元件的一个属性.如果此属性等于给定值,则必须在该点处"拆分".我怎么能在FSharp中做到这一点

如果必须在该项目中进行拆分,则将"函数"传递给它并返回bool应该是不错的.

示例:输入序列:seq: {1,2,3,4,1,5,6,7,1,9} 当它等于1时,应在每个项目上进行拆分,因此结果应为:

seq
{
seq{1,2,3,4}
seq{1,5,6,7}
seq{1,9}
}
Run Code Online (Sandbox Code Playgroud)

f# split seq

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

生成像112123123412345这样的序列

基本上我想生成一个序列,比如说:

n为2,序列为112
n为3,序列为112123
n为5,序列为112123123412345

我确实想出了一个解决方案

n=5
seq=1
for (i in 2:n){
  seq=c(seq,rep(1:n,len=i))
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种方法可以做到没有for循环?

r sequence seq

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

为什么我不能用seq强制执行IO操作?

鉴于此代码段:

someFunction x = print x `seq` 1

main = do print (someFunction "test")
Run Code Online (Sandbox Code Playgroud)

代码执行时为什么不print x打印test

$./seq_test 
1
Run Code Online (Sandbox Code Playgroud)

如果我替换它error我可以检查左操作数seq 是否确实被评估.

我怎样才能达到预期的输出:

test
1
Run Code Online (Sandbox Code Playgroud)

只修改someFunction

io haskell seq

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

如何在Perl 6中将序列作为参数传递?

在Perl 6中,我可以迭代一个文字序列:

.say for 0 ... 3;
Run Code Online (Sandbox Code Playgroud)

我可以绑定到标量并迭代:

my $s := 0 ... 3;
.say for $s;
Run Code Online (Sandbox Code Playgroud)

但我无法绑定到标量,将其作为参数传递,然后迭代:

my $t := 0 ... 3;
show( $t );

sub show ( $seq ) { .say for $seq }
Run Code Online (Sandbox Code Playgroud)

子例程获取Seq类型的单个元素,但它不会迭代它.

0
1
2
3
0
1
2
3
(0 1 2 3)
Run Code Online (Sandbox Code Playgroud)

在准备参数的过程中有什么东西已遍历所有内容吗?

perl6 seq

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

两个数字的序列减少了其中一个的出现

我想从两个数字创建一个序列,这样一个数字的出现减少(从n_11到1),而另一个数字的出现被固定为n_2.

我一直在寻找并尝试使用seq和rep来做它,但我似乎无法弄明白.

下面是一个例子c(0,1)并且n_1=5,n_2=3:

0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,1,1,1,0,1,1,1
Run Code Online (Sandbox Code Playgroud)

而这里c(0,1)n_1=2,n_2=1:

0,0,1,0,1
Run Code Online (Sandbox Code Playgroud)

r sequence seq rep

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

为什么我不能在Perl 6列表中"尾随"`tail`的结果?

为什么我不能tail结果tail呢?我可以调用head序列tail返回(和其他变体),但是a tail上的a tail不起作用(在2017.10中):

> my $list = <a b c d e f g h i j>;
(a b c d e f g h i j)
> $list.head(5).head
a
> $list.head(5).tail
e
> $list.tail(5).head
f
Run Code Online (Sandbox Code Playgroud)

这个失败了:

> $list.tail(5).tail
Nil
Run Code Online (Sandbox Code Playgroud)

但扔list在那里工作:

> $list.tail(5).list.tail
j
Run Code Online (Sandbox Code Playgroud)

perl6 seq

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

如何以惯用的方式在scala中创建嵌套的toSet?

是否有更惯用的方法将嵌套的序列序列更改为嵌套的集合?

def toNestedSet[T](tsss: Seq[Seq[Seq[T]]]): Set[Set[Set[T]]]  = 
   tsss.map(_.map(_.toSet).toSet).toSet
Run Code Online (Sandbox Code Playgroud)

是否可以实现一个可以处理任何深度列表的函数?

scala nested list set seq

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

F#:如何评估"seq"以急切获取其所有值?

我们知道在F#中,seq是懒惰的评估.我的问题是,如果我有一个数量有限的seq,如何将其转换为包含其所有值的评估数据类型?

> seq { for i in 1 .. 10 do yield i * i };;
val it : seq<int> = seq [1; 4; 9; 16; ...]
Run Code Online (Sandbox Code Playgroud)

非常感谢.

evaluation f# eager seq

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

标签 统计

seq ×10

f# ×3

list ×2

perl6 ×2

r ×2

scala ×2

sequence ×2

eager ×1

evaluation ×1

generics ×1

haskell ×1

inference ×1

io ×1

json ×1

lift ×1

nested ×1

rep ×1

set ×1

split ×1

types ×1