我对OCaml Batteries Included概念和我能找到的大多数教程的方式感到有点沮丧和困惑.之前,我用像GODI"生产力"工具或更换的调用ocamlc与ocamlfind电池/ ocamlc(这是,在这一点上,对我来说太不可思议),我希望能够简单地使用OCaml中有电池组核心库像任何其他图书馆.为此,我从git(head hash:9f94ecb)下载了最新的源代码并完成了make all.我注意到我在./_build/src/上有三个.cma库以及同一目录中的102个.cmi文件.所以我假设使用指向该目录的-I开关进行编译并链接到三个.cma库中的一个,发现这样就足够了而无需"安装"电池或使用平台工具.为了测试它,我开始为我在某处找到的以下简单程序生成一个可执行文件:
(* file euler001.ml *)
open BatEnum
open BatPervasives
let main () =
(1--999)
|> BatEnum.filter (fun i -> i mod 3 = 0 || i mod 5 == 0)
|> BatEnum.reduce (+)
|> BatInt.print stdout
let _ = main ()
Run Code Online (Sandbox Code Playgroud)
我能够编译它:
ocamlc -c -I ../batteries-included/_build/src/ euler001.ml
但当我试图链接:
ocamlc -o euler001 unix.cma nums.cma ../batteries-included/_build/src/batteries.cma euler001.cmo
我有:
File "_none_", line …
注意:我提到的测试项目可以下载:
git clone https://github.com/mperdikeas/so-spring-di-appcontext-schemalocation.git
..并使用'ant run'运行.
我理解'XML命名空间名称仅用作不透明标识符,并不打算用作URI(维基百科).我还"理解"XML模式位置旨在提供关于模式文档的实际位置的提示,并且是提示,而不是在实践中使用(w3.org).考虑到这一点,我一直在通过修改applicationContext.xml来试验一个简单的Spring DI应用程序(在简单的J2SE设置中使用).这是起始版本:
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns:context = "http://www.springframework.org/schema/context"
xmlns:p = "http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:component-scan base-package="atm"/>
<context:property-placeholder location="classpath:META-INF/spring/atm.properties"/>
<bean id="soapTransport_" class="atm.SoapATMTransport" p:retries="${transport.retries}"/>
Run Code Online (Sandbox Code Playgroud)
当我执行'sudo ifconfig eth0 down'时,项目运行得很好,这与运行时没有从schemaLocations中获取任何内容一致.但是,当我通过向每对中的第二个URL添加一个简单的下划线来修改schemaLocations时,我收到了以下投诉:
[java] org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 10 in XML document from class path resource [META-INF/spring/applicationContext.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 10; columnNumber: 100; cvc-elt.1: Cannot find the declaration of element 'beans'.
[java] at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:194)
[java] at org.apache.tools.ant.taskdefs.Java.run(Java.java:771)
[java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:221) …Run Code Online (Sandbox Code Playgroud) 为什么以下代码干净地编译而没有任何警告,即使是xlint:all?
class A<V> {
public V v;
public <V> A() {
}
public static <V> A<V> create() {
return new A<V>();
}
}
public class FooMain {
public static void main(String args[]) {
A.create().v = 5;
A.create().v = "a string";
}
}
Run Code Online (Sandbox Code Playgroud)
运行:
javac -Xlint:all src/FooMain.java
Run Code Online (Sandbox Code Playgroud)
导致干净的编译没有任何警告(未选中等).A在第一行创建的泛型类实例的类型参数化是什么,第二行是什么?编译器如何确定类型?通过查看r值的类型?
我通过测试验证了两种模式可以从npm发布的模块导入流注释,类型和接口.
在下面我使用下面的模块名称:
使用export type类型和接口的语法:
type IComplex ...
interface IMutableComplex ...
export type {IComplex, IMutableComplex}
Run Code Online (Sandbox Code Playgroud)将所有*.js文件复制为*.js.flow.例如,通过以下内容package.json:
"main": "lib/index.js",
"scripts": {
"prepublish": "mkdir -p lib && for f in $(find src/ -iname *.js | cut -c5-) ; do cp src/$f lib/$f.flow; done",
...
},
Run Code Online (Sandbox Code Playgroud)npm i --S module-A使得注释也可用,因为已发布模块js.flow的lib/目录中的文件.使用以下语法导入类型和接口:
import type {IComplex, IMutableComplex} from 'module-A';
Run Code Online (Sandbox Code Playgroud)定义declarations.js放在decl目录中的文件中的类型,接口和模块(从 …
我认为使用getQuery会丢失信息,是危险的,应该只使用getRawQuery,并且应该&使用URLDecoder手动解码任何已知被编码的查询参数值(一旦原始查询在字符上拆分)。
举个例子:假设你的 URLwww.example.com有两个查询参数:
url带值的参数=www.otherexample.com?b=2&c=3d值为 4的非描述性参数。该参数url应该是 url 编码的,因此您的应用程序看到的 URI 是:
www.example.com?url=www%2Eotherexample%2Ecom%3Fb%3D2%26c%3D3&d=4
现在,如果您使用getQuery获取查询部分,您将获得以下信息:
url=www.otherexample.com?b=2&c=3&d=4
请注意,您已经丢失了信息,因为您无法确定是否d是www.example.com或 的查询参数www.otherexample.com。
相反,如果您使用getRawQuery获取查询部分,则会得到以下信息:
url=www%2Eotherexample%2Ecom%3Fb%3D2%26c%3D3&d=4
这一次,没有信息丢失,一切都很好。url如果您愿意,您可以解析查询部分并对参数值进行 URL 解码。
我错过了什么吗?
我正在阅读OCaml首席设计师1994年关于模块,类型和单独编译的论文.(诺曼拉姆齐在另一个问题中向我指出).据我所知,本文讨论了OCaml目前的模块类型/签名系统的起源.在此,作者提出了对签名中类型声明的不透明解释(允许单独编译)以及清单类型声明(表达性).试图将我自己的一些示例放在一起来演示OCaml模块签名符号试图解决的问题,我在两个文件中编写了以下代码:
在文件中ordering.ml(或.mli- 我已经尝试过)(文件A):
module type ORDERING = sig
type t
val isLess : t -> t -> bool
end
Run Code Online (Sandbox Code Playgroud)
并在文件useOrdering.ml(文件B)中:
open Ordering
module StringOrdering : ORDERING
let main () =
Printf.printf "%b" StringOrdering.isLess "a" "b"
main ()
Run Code Online (Sandbox Code Playgroud)
想法是期望编译器抱怨(在编译第二个文件时)模块上没有足够的类型信息StringOrdering来检查StringOrdering.isLess应用程序(从而激发对with type语法的需求).但是,尽管文件A按预期编译,但文件B导致3.11.2 ocamlc抱怨语法错误.我知道签名的目的是允许某人根据模块签名编写代码,而无需访问实现(模块结构).
我承认我不确定语法:module A : B我在这篇相当旧的论文中遇到的单独编译,但它让我想知道是否存在这样或类似的语法(不涉及仿函数)以允许某人仅根据模块类型编写代码,在链接时提供的实际模块结构,类似于人们如何在C/C++中使用*.h和*.c文件.没有这样的能力,似乎模块类型/签名基本上用于密封/隐藏模块的内部或更明确的类型检查/注释,但不用于单独/独立的编译.
实际上,看看关于模块和单独编译的 …
我想了解在JSF2.0中附加标记"?faces-redirect=true"的action属性背后的语义是什么<h:commandlink>.无论是使用它还是使用它,应用程序确实导航到操作中指定的目标页面.所以乍一看,似乎唯一的效果就是整容,即向用户提供反馈(如果他正在查看浏览器的访问过的URL),他已经移动到新页面.但如果它是如此无害且无副作用,我无法理解为什么它不是默认行为.我怀疑它与JSF2.0的基于post的机制有关.我通过对网址人们看到他的浏览器(当一个JSF应用程序在浏览时已经注意到?faces-redirect=true不使用)是'前’,'页面的次数.’
元NB.我在防火墙后面并且受到"SO需要来自另一个域的外部JavaScript"问题的困扰,所以我为没有格式化而道歉.当我可以从其他域访问时,我还会在几个小时内提供有关您的答案的反馈.
我有以下Ant <java>任务:
<property name="classpath-run.msg" refid="run.classpath"/>
<echo message="running the app with classpath = ${classpath-run.msg}"/>
<echo message="Java version used (ant.java.version): ${ant.java.version}"/>
<echo message="Java version used ( java.version): ${java.version}"/>
<java classname ="${project.MainClass.name}">
<permissions>
<grant class="java.security.AllPermission"/>
<grant class="javax.management.MBeanTrustPermission" action="register"/>
</permissions>
<classpath refid="run.classpath"/>
</java>
Run Code Online (Sandbox Code Playgroud)
当我运行Ant时执行任务失败(见下面的跟踪).当我复制粘贴回显的类路径并使用java -classpath从命令行运行我的代码时,执行成功!
在这两种情况下都使用相同版本的java.
我怎么可能观察到不同的行为?一个java.security.AccessControlException坐在堆栈跟踪的根,但我已经给予我的Ant的java任务中的所有安全权限,包括明确的MBeanTrustPermission的行动寄存器也出现在堆栈跟踪.
跟踪(在Ant下运行时)如下:
[java] java.lang.ExceptionInInitializerError
[java] at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:194)
[java] at org.apache.tools.ant.taskdefs.Java.run(Java.java:771)
[java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:221)
[java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:135)
[java] at org.apache.tools.ant.taskdefs.Java.execute(Java.java:108) …Run Code Online (Sandbox Code Playgroud) 这是我在PostgreSQL中遇到的问题的简化版本.
我有下表A:
[ID INTEGER | VALUE NUMERIC(10,2) | 家长 整数 ]
其中'PARENT'是列引用ID的自引用FK.
表定义是:
CREATE TABLE A(ID INTEGER IDENTITY, VALUE NUMERIC(10,2), PARENT INTEGER)
ALTER TABLE A ADD CONSTRAINT FK FOREIGN KEY (PARENT) REFERENCES A(ID)
Run Code Online (Sandbox Code Playgroud)
这个简单的表允许定义任意深度的树数据结构.现在我需要编写一个SQL(我不想使用服务器端PL-SQL)来报告每个节点,子树的总值"悬挂"在它下面.例如,使用下表:
| ID | VALUE | PARENT |
-------------------------
| 1 | NULL | NULL |
| 2 | 3.50 | 1 |
| 3 | NULL | NULL |
| 4 | NULL | 3 |
| 5 | 1.50 | 4 |
| …Run Code Online (Sandbox Code Playgroud) 给定以下树(或Clojure中的任何其他形式,包括地图和向量):
'( (a b) (c d) )
Run Code Online (Sandbox Code Playgroud)
我想在Clojure中生成一个映射,它根据整个表单的深度优先遍历索引每个子表单,并提供表单子节点索引的向量(或列表)(如果有的话).
0 -> a []
1 -> b []
2 -> (a b) [0 1]
3 -> c []
4 -> d []
5 -> (c d) [3 4]
6 -> ( (a b) (c d) ) [2 5]
Run Code Online (Sandbox Code Playgroud)
到目前为止,我只设法使用clojure.walk生成第一部分(索引子表单),但我对如何生成子项的索引感到困惑.我的代码附加在最后并产生:
user=> (depthFirstIndexing '( (a b) (c d) ))
{6 ((a b) (c d)), 5 (c d), 4 d, 3 c, 2 (a b), 1 b, 0 a}
Run Code Online (Sandbox Code Playgroud)
因此,根据深度优先遍历正确生成子表单的索引,但我不知道如何获取每个子表单的子节点的索引.我试图使用拉链模块,但我看不到如何执行深度优先遍历来收集索引.
(use 'clojure.walk) …Run Code Online (Sandbox Code Playgroud)