如何在Scala中执行2D数组的深层复制?
例如
val a = Array[Array[Int]](2,3)
a(1,0) = 12
Run Code Online (Sandbox Code Playgroud)
我希望val b复制a的值但不指向同一个数组.
在某个GET请求中,我需要在本地读取文件,具体取决于请求中的参数,并在请求的输入流上发送.我该怎么做?
class GetArchives(tornado.web.RequestHandler):
def get(self, param1, param2):
path = calculate_path(param1, param2)
try:
f = open(path, 'rb')
# TODO: send this file to request's input stream.
except IOError:
raise tornado.web.HTTPError(404, 'Invalid archive')
Run Code Online (Sandbox Code Playgroud) 据我所知,Java/JVM中的最佳实践要求你永远不要Throwable直接捕获,因为它涵盖的Error内容恰好包含OutOfMemoryError和KernelError.这里和这里有一些参考.
但是在Scala标准库中,有一个提取器NonFatal被广泛推荐(并被广泛使用的流行库如Akka)作为块中的最终处理程序(如果需要)catch.如果怀疑这个提取器恰好是捕获Throwable并重新抛出它,如果它是致命错误之一.请参阅此处的代码.
这可以通过一些反汇编的字节码进一步证实:
问题:
Throwable?NonFatal导致严重的问题吗?如果没有,为什么不呢?有许多Win32函数接受缓冲区的地址,例如TCHAR[256],并将一些数据写入该缓冲区.它可能小于缓冲区的大小,也可能是整个缓冲区.
通常你会在循环中调用它,例如从流或管道中读取数据.最后,我想有效地返回一个字符串,该字符串包含来自所有迭代调用的完整数据,以检索此数据.我一直在考虑使用,std::string因为它的+ =以类似于Java或C#StringBuffer.append()/ StringBuilder.Append()方法的方式进行优化,有利于速度而不是内存.
但是我不确定如何最好地std::string与Win32函数混合使用,因为这些函数都是char[]从头开始的.有什么建议?
以下代码按预期执行,但最后给出了一个代码NullPointerException.我在这做错了什么?
(ns my-first-macro)
(defmacro exec-all [& commands]
(map (fn [c] `(println "Code: " '~c "\t=>\tResult: " ~c)) commands))
(exec-all
(cons 2 [4 5 6])
({:k 3 :m 8} :k)
(conj [4 5 \d] \e \f))
; Output:
; Clojure 1.2.0-master-SNAPSHOT
; Code: (cons 2 [4 5 6]) => Result: (2 4 5 6)
; Code: ({:k 3, :m 8} :k) => Result: 3
; Code: (conj [4 5 d] e f) => Result: [4 5 d e f] …Run Code Online (Sandbox Code Playgroud) C++标准库和/或Boost是否与filter函数式语言中的函数类似?
我能找到的最接近的功能是std::remove_copy_if它似乎与我想要的相反.是否boost::lambda有任何函数来获取我的谓词的否定版本(类似于notHaskell)?我可以否定我的谓词并std::remove_copy_if随之使用它.
请注意,我不是在问如何filter用C++ 编写函数; 我只想问标准库和/或Boost是否已经提供了这样的功能.
提前致谢.
我正在尝试使用其Scala包装器的 joda-time .
说val dt是一个DateTime并包含一个date (zero time),我如何获得当天的日期呢?dt - 1.days不起作用并给出
"type mismatch" ("found: org.scala_tools.time.Imports.DateTime, required: ?{val -:?}").
Run Code Online (Sandbox Code Playgroud)
像Scala-time这样的例子2.hours + 45.minutes + 10.seconds也不起作用,或者说它hours不是一个成员Int.
例如,Joda-time示例DateTime.dayOfWeek().addToCopy(3)不起作用dayOfWeek,因为它不是成员org.scala_tools.time.Imports.DateTime.
格式化的DateTime输入和输出似乎可以正常工作.
更新:似乎是NetBeans IDE的一个错误.它显示错误,而编译器编译正常,程序按预期的方式工作dt - 1.days.
什么是最简洁的Scala方式来反转地图?地图可能包含非唯一值.
编辑:
逆转 Map[A, B]应该给Map[B, Set[A]](或者一个MultiMap,那会更好).
我想Maybe在C#中编写一个简单的monad.我希望能够使用LINQ查询语法.这是我到目前为止所提出的:
using System;
using System.Collections.Generic;
abstract class Maybe<A> {
public abstract Maybe<B> SelectMany<B>(Func<A, Maybe<B>> f);
public abstract Maybe<B> Select<B>(Func<A, B> f);
}
class Just<A> : Maybe<A> {
private readonly A a;
public Just(A a) {
this.a = a;
}
override public Maybe<B> SelectMany<B>(Func<A, Maybe<B>> f) {
return f(a);
}
override public Maybe<B> Select<B>(Func<A, B> f) {
return new Just<B>(f(a));
}
override public string ToString() {
return "Just " + a;
}
}
class Nothing<A> : Maybe<A> {
override …Run Code Online (Sandbox Code Playgroud) 在运行以下命令时:
ant targetname -Dk1=v1 -Dk2=v2
Run Code Online (Sandbox Code Playgroud)
我希望传递给命令行参数java,比如java whatever -Dk1=v1 -Dk2=v2.
我需要使用System.getProperty或从Java代码访问这些参数System.getenv.
我需要在我的ant构建脚本中编写什么来实现这一目标?
或者我应该采取其他方法吗?