我搜索过,我只能找到相反的问题:将stdin写入文件:)
有没有一种快速简便的方法将文件的内容转储到stdout?
这是一个错误或功能吗?以下代码在Java 7中运行正常但在Java 8中引发异常:
最后一个命令在Java8中抛出ClassCast异常,上面的所有"等效"命令的工作方式相同.
我认为问题在于,在Java 8中,编译器决定String.value(char[])在最后一行而不是String.value(Object)在Java 7中使用.我认为这对于向后兼容性应该采用相同的方式.我错过了什么吗?
注意:正如Marko所说,这可能与Java 8中引入的目标类型推断有关.
public class Test {
public static void main(String[] args) {
System.out.println( getVal().getClass()); // String
System.out.println( String.valueOf(Test.<Object>getVal()) ); // "abc"
Object obj = getVal();
System.out.println( String.valueOf(obj) ); // "abc"
System.out.println( String.valueOf(getVal()) ); // 7: "abc", 8: Exception
}
// returns a string for simplicity; imagine that given a field, it fetches values from a database
@SuppressWarnings("unchecked")
public static <T> T getVal() {
return (T) "abc";
}
}
Run Code Online (Sandbox Code Playgroud)
Java …
让我们假设以下方法(比如来自Guava的Iterables):
public static <T> Iterable<T> filter(final Iterable<?> unfiltered, final Class<T> type) {
return null;
}
Run Code Online (Sandbox Code Playgroud)
而这个集合:
Set<?> objs = ...;
Run Code Online (Sandbox Code Playgroud)
然后编译以下代码并正确派生泛型
Iterable<String> a2 = Iterables.filter(objs, String.class);
Run Code Online (Sandbox Code Playgroud)
(在Guava中,这将返回所有字符串的迭代objs.)
但现在让我们假设以下类:
static class Abc<E> {
E someField;
}
Run Code Online (Sandbox Code Playgroud)
我不知道怎么打电话filter和得到Iterable<Abc<?>>:
Iterable<Abc> a3 = Iterables.filter(objs, Abc.class);
Iterable<Abc<?>> a4 = Iterables.filter(objs, Abc.class); // Compile error - Abc and Abc<?> are incompatible types
Iterable<Abc<?>> a5 = Iterables.filter(objs, Abc<?>.class); // Compile error
Iterable<Abc<?>> a6 = Iterables.<Abc<?>>filter(objs, Abc.class); // Compile error
Iterable<Abc<?>> a7 …Run Code Online (Sandbox Code Playgroud) 我们使用Solr来存储带有关键字的文档; 每个关键字都与文档中的范围相关联.
在将它们加载到Solr之前,关键字是由一些花哨的分析和/或手工工作产生的.关键字可以在文档中重复多次.另一方面,单个文档中相同字符串的不同实例可以与不同的关键字连接.
例如,本文档
Bill studied The Bill of Rights last summer.
Run Code Online (Sandbox Code Playgroud)
可以附带以下关键字(括号中的偏移量):
William Brown (0:4)
legal term (13:31)
summer 2011 (32:43)
Run Code Online (Sandbox Code Playgroud)
(显然在其他文件中,比尔可以提到比尔克林顿或比尔盖茨.同样,去年夏天将在不同的文件中提到不同的年份.我们确实拥有所有这些文件的所有信息.)
我知道文档可以有一个字段,比如KEYWORD,它将存储William Brown.然后当我搜索时,William Brown我会得到上面的文件.那部分很容易.
但我不知道如何存储与William Brown文本范围相对应的信息,0:4因此我可以突出显示第一个Bill,但不是第二个.
我以为我可以使用TermVectors,但我不确定是否/如何存储自定义偏移量.我认为这是一个相当常见的情况......
编辑:编辑,以明确比尔可以参考不同文件中的不同人/事.
EDIT2:编辑以明确文档可以包含同音异义词(具有不同含义的相同字符串).
我对qore 0.8.12中的变量范围感到有些困惑.似乎函数参数与全局变量具有相同的范围 - 这是可能的,还是我做错了什么?
3.1.0 kveton@kvela ~$ cat zk1.q
%new-style
%strict-args
sub fun(string v)
{
print("xxx\n");
}
string v = "zzz";
3.1.0 kveton@kvela ~$ qore zk1.q
unhandled QORE System exception thrown in TID 1 at 2017-01-30 08:10:32.612137 Mon +01:00 (CET) at zk1.q:4
PARSE-ERROR: local variable 'v' was already declared in the same block at zk1.q:9
Run Code Online (Sandbox Code Playgroud)
谢谢你的解释......
我想在Qore中拆分列表,如下所示:
list a = (1,2,3,4,5,6);
list pieces = split_list_into_pieces(a, 2);
printf("%y\n", pieces);
Run Code Online (Sandbox Code Playgroud)
期望的输出:
[[1,2], [3,4], [5,6]]
Run Code Online (Sandbox Code Playgroud)
即我想要一个(据称很长)列表并将其分成给定(最大)长度的片段.
我可以这样做:
list sub split_list_into_pieces(list a, int length)
{
int i = 0;
list ret = ();
list temp = ();
foreach any x in (a)
{
temp += x;
i++;
if (i == length)
{
push ret, temp;
temp = ();
i = 0;
}
}
if (temp)
{
push ret, temp;
}
return ret;
}
Run Code Online (Sandbox Code Playgroud)
但它不是很优雅,是吗?
更好的解决方案?