为什么像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允许这个编译呢?
这是我第一次遇到以下警告"警告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) 我正在使用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) 来自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)
显然有些重大改变了吗?为什么这些例子不起作用?有更好的书可供学习吗?
这种语言很棒,我想尽我所能,但资源很少.
我不明白为什么以下代码太慢.这段代码的目标很简单:我有一组点,我想分成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) 我正在使用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)