小编Cal*_*oiu的帖子

如何在Scala中对泛型类型进行模式匹配?

我们假设我们有一个泛型类Container:

case class Container[+A](value: A)
Run Code Online (Sandbox Code Playgroud)

然后,我们希望模式匹配一个ContainerDoubleContainerAny:

val double = Container(3.3)  
var container: Container[Any] = double
Run Code Online (Sandbox Code Playgroud)

为此,我们通常会写:

container match {  
  case c: Container[String] => println(c.value.toUpperCase)
  case c: Container[Double] => println(math.sqrt(c.value))  
  case _ => println("_")  
}
Run Code Online (Sandbox Code Playgroud)

但是,编译器会给出两个警告,前两个案例各一个.例如,第一个警告说:"类型模式容器[String]中的非变量类型参数字符串未被选中,因为它被擦除".由于擦除,在运行期间不可能区分不同类型的容器并且第一个捕获物将匹配.因此,类型的容器Container[Double]将与捕获Container[String]对象的第一个案例匹配,因此toUpperCase将在a上调用方法,Double并且java.lang.ClassCastException将抛出a.

如何匹配Container特定类型的参数化?

scala pattern-matching type-erasure

26
推荐指数
4
解决办法
2万
查看次数

Reddit中使用的Cassandra数据库模式是什么?

Reddit目前正在将其数据库从PosgreSQL迁移到Apache Cassandra.有人知道Reddit在Cassandra中使用了什么数据库模式吗?

reddit cassandra database-schema

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

对函数的循环调用,直到它返回None

我经常遇到一个模式,所以我想知道Scala库中是否有任何方便的方法.

让它成为一种功能f: A => Option[B].我愿做一个反复调用f一个起点开始x,f(f(f(x).get).get...)直至f恢复None并保持最后的非None价值.

我为此写了一个实现:

@tailrec
def recurrentCallUntilNone[B](f: B => Option[B], x: B): B = f(x) match {
  case Some(y) => recurrentCallUntilNone(f, y)
  case None => x
}
Run Code Online (Sandbox Code Playgroud)

这已经在标准库中实现了吗?

对此的使用示例可以是用于保持当前位置的列表(Zipper).通过调用next,None如果在当前位置之后没有元素或者Option对于相同列表没有元素但是当前位置递增,则返回.通过使用上述方法,end可以构造一种寻找列表到最后的方法.

functional-programming scala

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

我可以在Scalding map方法中输出集合而不是元组吗?

如果要在Scalding中创建一个包含超过22个字段的管道,则受Scala元组的限制,Scala元组的数量不能超过22个.

有没有办法使用集合而不是元组?我想象下面的例子,遗憾的是它不起作用:

input.read.mapTo('line -> aLotOfFields) { line: String =>
  (1 to 24).map(_.toString)
}.write(output)
Run Code Online (Sandbox Code Playgroud)

scala scalding

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

当用户键入时实时显示 HTML 文本区域中的字符数

我正在尝试创建一个form带有 atextarea和 a的博客评论span,它向用户显示可以在文本区域中引入的剩余字符数。

所以我有这个表格:

<form action="comment.php" method="POST" accept-charset="utf-8">
    <textarea name="comment" id="comment" rows="4" cols="56"></textarea>

    <input type="submit" value="Post" />
    <span id="comment-chars-left">512</span> characters left
</form>
Run Code Online (Sandbox Code Playgroud)

然后我编写了以下 jQuery 代码:

$('#comment')
    .keydown(function(event) {
        $('#comment-chars-left').html('' + (512 - $textarea.val().length));
    });
Run Code Online (Sandbox Code Playgroud)

问题是,当.keydown首先调用输入时,它会打印剩余字符的数量,然后输入的新字符显示在textarea. 因此剩余字符数没有正确的值,大了一个单位。要使这项工作正常进行,.keydown应在插入新字符后调用。

我该如何解决这个问题?

html javascript jquery

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

为什么XML文字在Scala中产生可变对象?

当在Scala中将节点序列声明为文字时,您会产生一个scala.xml.NodeBuffer可变的(它扩展ArrayBuffer[scala.xml.Node]而后者又扩展Seq[scala.xml.Node]):

scala> val xml = <a /><b />
xml: scala.xml.NodeBuffer = ArrayBuffer(<a></a>, <b></b>)

scala> xml += <c />
res46: xml.type = ArrayBuffer(<a></a>, <b></b>, <c></c>)

scala> xml
res47: scala.xml.NodeBuffer = ArrayBuffer(<a></a>, <b></b>, <c></c>)
Run Code Online (Sandbox Code Playgroud)

这与Scala使用不可变对象和函数式编程的哲学相矛盾.为什么默认情况下集合是不可变的,但XML文字(它们是一等公民)在这种情况下不是?

但是,是否可以使用XML文字安全地定义不可变节点序列?

xml scala immutability

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

为什么使用AJAX返回的Javascript代码不会写入指定的<div>,但它会替换整个页面?

我正在使用AJAX(使用jQuery)请求一个包含对Apache + PHP服务器的Javascript函数调用的标记.这是HTML和AJAX代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript" src="http://localhost/LivingLab/javascript/jquery.min.js"></script>
</head>

<body>
<a href="javascript: void(0)" onclick="
    $.post(
        'http://localhost/test.php',    // server target page
        {some_var: 'abc'},              // data to be sent via POST method
        function(data) {                // JS callback function
            $('#container').html(data); // innerHTML of <div id="container"> will be replaced
        }
    )
">Click me!</a>
<div id="container"></div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

AJAX请求页面'http://localhost/test.php',它具有以下PHP代码:

<?php
    echo '<script type="text/javascript"> document.write("Javascript output"); </script>';
?>
Run Code Online (Sandbox Code Playgroud)

当我点击链接时,在AJAX请求之后,整个页面被"Javascript output"替换,而不是仅在id为"container"的div标签内写入.

如果PHP服务器脚本写入其他内容,而不是像这样的脚本标记:

<?php echo 'text' ?>
Run Code Online (Sandbox Code Playgroud)

通过用id"container"替换div而不是整个页面,AJAX调用表现正常.

我试图用Wireshark调查这个页面传输的HTTP数据,它似乎不是一个HTTP问题,因为服务器响应正是它应该是这样的:

<script …
Run Code Online (Sandbox Code Playgroud)

javascript php ajax jquery

2
推荐指数
1
解决办法
1060
查看次数