小编ali*_*rat的帖子

为什么Scala允许嵌套数据结构,如List或Array

为什么像Scala这样具有非常强大的静态类型系统的语言允许以下结构:

 scala> List(1, List(1,2))
 res0: List[Any] = List(1, List(1, 2))
Run Code Online (Sandbox Code Playgroud)

如果你替换List,同样的事情Array.我在OCaml中学习了函数式编程,它会在编译时拒绝相同的代码:

# [1; [1;2]; 3];;
Characters 4-9:
  [1; [1;2]; 3];;
      ^^^^^
Error: This expression has type 'a list
       but an expression was expected of type int
Run Code Online (Sandbox Code Playgroud)

那么为什么Scala允许这个编译呢?

ocaml scala typing

14
推荐指数
2
解决办法
695
查看次数

避免警告"警告21:此语句永远不会返回(或者有一个不健全的类型.)"

这是我第一次遇到以下警告"警告21:此语句永远不会返回(或有一个不健全的类型.)",我不知道如何解决它.

let display_committers_stats response = match response##readyState with
  | XmlHttpRequest.DONE ->
    begin match response##status with
      | 200 ->
        Js_client_ui.create_menu_tabs "GitSearchTabs";
        let l =
          Json_parser.get_commits (Js.to_string response##responseText) in
        let values = 
          Json_parser.group_commits_by_user l
          |> List.map (fun (author, commits) ->
              Js_data.create_discreteBar_item author (float_of_int commits))
          |> Array.of_list 
          |> Js.array in
        let discreteBar_chart =
          Js_data.create_discreteBar_chart "Commits-impact" values in
        let js_arr = Js.array ([|discreteBar_chart |]) in 
        Js.Unsafe.fun_call
          (Js.Unsafe.variable "create_discreteBar_chart")
          [|
            Js.Unsafe.inject ((js_arr))              
          |];
        let js_arr =
        l
        |> List.mapi (fun i commit -> …
Run Code Online (Sandbox Code Playgroud)

warnings ocaml

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

AWS Lambda - 如何获取来自AWS IOT的数据主题名称

我正在使用AWS IOT源测试AWS Lambda.我的mqtt客户端正在发布不同的主题:设备A将数据发布到streaming/A,设备B将数据发布到streaming/BAWS Lambda中,因此我定义了一个SQL规则,选择来自主题的所有设备streaming/+.问题是,现在我没有设备源的信息,因为我只有一个Array[Byte]]额外的信息.如果有人有解决方案来访问带有主题信息的mqtt有效负载,我会接受它!

import java.io.{ByteArrayOutputStream, InputStream, OutputStream}
import com.amazonaws.services.lambda.runtime.{Context, RequestStreamHandler}
/**
  * Created by alifirat on 24/04/17.
  */
class IOTConsumer extends RequestStreamHandler {

  val BUFFER_SIZE = 1024 * 4

  override def handleRequest(input: InputStream, output: OutputStream, context: Context): Unit = {
    val bytes = toByteArray(input)
    val logger= context.getLogger
    logger.log("Receive following thing :"  + new String(bytes))
    output.write(bytes)
  }

   /**
     * Reads and returns the rest of the given input stream as a byte …
Run Code Online (Sandbox Code Playgroud)

scala amazon-web-services mqtt aws-lambda aws-iot

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

自RWO以来,OCaml编译器是否彻底改变了?

来自Real World OCaml的示例第60页

List.map ~f:((+) 3) [4;5;6;];;
Error: The function applied to this argument has type 'a list -> 'b list
This argument cannot be applied with label ~f
Run Code Online (Sandbox Code Playgroud)

来自HTML托管版RWO的相同示例

List.map ~f:((+) 3) [4;5;6];;
- : int list = [7; 8; 9]
Error: The function applied to this argument has type 'a list -> 'b list
This argument cannot be applied with label ~f
Run Code Online (Sandbox Code Playgroud)

显然有些重大改变了吗?为什么这些例子不起作用?有更好的书可供学习吗?

这种语言很棒,我想尽我所能,但资源很少.

ocaml

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

简单循环太慢了

我不明白为什么以下代码太慢.这段代码的目标很简单:我有一组点,我想分成6个桶(每桶100000点).代码 :

import scala.collection.mutable.{Map, ListBuffer}
object Main {
  def main(args : Array[String]) = {
    val m : Map[String, ListBuffer[Double]] = Map()
    val labels = Array("1","2","3","4","5","6")
    val points = Array.fill(600000){0.0}
    var it = 0
    val t1 = System.currentTimeMillis
    for (i <- 0 until points.length) {
      if(it == labels.length-1) it = 0
      val point = points(i)
      val currentLabel = labels(it)
      val values = m.getOrElse(currentLabel, ListBuffer())
      m += (currentLabel -> (values :+ point))
      it += 1
      println("it -> = " + it)

    } …
Run Code Online (Sandbox Code Playgroud)

algorithm complexity-theory scala

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

AWS Athena-应用过滤器,然后计算百分位数

我正在使用AWS Athena来计算一些指标。我有一个像这样的数据集:

sessionumber 0 10 -1 10 2 -10 10

我正在尝试计算该值的百分位数,但仅针对有效值的子集。有效值是,sessionnumber > 1因此我尝试了以下操作:

with testfun AS 
    (SELECT filter(array_agg(sessionnumber), x -> x >= 1) as validvalues 
     FROM "mydate")

SELECT (percentiles(validvalues, 0.25) FROM testfun
Run Code Online (Sandbox Code Playgroud)

但是我遇到了以下错误:

SYNTAX_ERROR: line 17:10: Unexpected parameters (array(integer), double) for function approx_percentile. Expected: approx_percentile(bigint, double) , approx_percentile(bigint, bigint, double) , approx_percentile(bigint, bigint, double, double) , approx_percentile(bigint, array(double)) , approx_percentile(bigint, bigint, array(double)) , approx_percentile(double, double) , approx_percentile(double, bigint, double, double) , approx_percentile(double, bigint, double) , approx_percentile(double, array(double)) , …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services presto amazon-athena

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