标签: diamond-operator

在perl @ARGV中查找管道和重定向

编写传统的Unix/Linux程序时,perl提供了菱形运算符<>.我试图理解如何测试是否没有传递任何参数以避免perl脚本在STDIN的等待循环中不应该.

#!/usr/bin/perl
# Reading @ARGV when pipe or redirect on the command line
use warnings;
use strict;

while ( defined (my $line = <ARGV>)) { 
    print "$ARGV: $. $line" if ($line =~ /eof/) ;  # an example
    close(ARGV) if eof;
}

sub usage {
    print  << "END_USAGE" ;
    Usage:
        $0 file
        $0 < file
        cat file | $0    
END_USAGE
    exit();
}
Run Code Online (Sandbox Code Playgroud)

一些输出运行显示<>工作,但没有参数我们等待STDIN输入,这不是我想要的.

$ cat grab.pl | ./grab.pl
-: 7     print "$ARGV: $. $line" if ($line =~ /eof/) ;  # an …
Run Code Online (Sandbox Code Playgroud)

perl pipe diamond-operator argv

3
推荐指数
1
解决办法
1485
查看次数

在Java 6中使用Generics在右侧?

我java 6我可以声明arraylist如下

方式1:使用泛型,也就是<Integer> 在右手边

List<Integer> p = new ArrayList<Integer>();
Run Code Online (Sandbox Code Playgroud)

Way2:使用钻石操作员

List<Integer> p = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

Way3:仅在左侧使用通用

List<Integer> p = new ArrayList(); 
Run Code Online (Sandbox Code Playgroud)

我更喜欢使用方式3作为简要介绍.这些方式之间有什么区别吗?我们应该选择哪一个?为什么?

更新: -我知道在java 7推荐第二种方式,但我的问题是在java 6的上下文中.哪一个更好?

对我来说,方式3也说p是整数的arraylist(同样通过way1传达).所以我发现除了IDE显示警告信息之外没有区别:

ArrayList是原始类型.ArrayList<E>应参数化对泛型类型的引用

java generics diamond-operator

3
推荐指数
1
解决办法
8263
查看次数

类型参数在泛型对象实例化的构造函数中是否有用?

我知道自Java 7以来,在实例化过程中在构造函数中重复泛型类的类型是一种冗余.但是钻石操作员<>怎么样,重复它呢?换句话说,我想知道这有什么区别:

List<String> Fruits = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

还有这个

List<String> Fruits = new ArrayList(); 
Run Code Online (Sandbox Code Playgroud)

或这个

 Map<Integer, String> students = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)

还有这个

 Map<Integer, String> students = new HashMap();
Run Code Online (Sandbox Code Playgroud)

先感谢您

java generics instantiation diamond-operator

3
推荐指数
1
解决办法
476
查看次数

JDK 1.6的Diamond语法替代

有人可以建议如何重写下面的代码,使其可以与JDK 1.6一起使用吗?

private Map<SocketChannel, byte[]> dataTracking = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)

java generics syntax diamond-operator java-6

3
推荐指数
1
解决办法
1989
查看次数

如何在标量上下文中使用菱形运算符作为函数调用参数?

如何直接将菱形运算符中的值传递给函数(sub)?

我试过了:

#!/usr/bin/perl
use Math::Complex;

#quadraticEq - quadratic equation with parameters a ,b ,c
sub quadraticEq {
    print "\nx1= ", 
      ($_[1]*$_[1]-sqrt($_[1]*$_[1]-4*$_[0]*$_[2]))/(2*$_[0]),
      "\nx2= ",
      ($_[1]*$_[1]+sqrt($_[1]*$_[1]-4*$_[0]*$_[2]))/(2*$_[0]);
}

print 'Enter Numbers:';
quadraticEq(<>,<>,<>); #here
Run Code Online (Sandbox Code Playgroud)

但是当我为每个函数参数输入数字时,我需要输入EOF.它表现得像@array=<>.我希望它表现得像$var=<>.所以输入应该如下所示:

Enter Numbers: 5 4 3
Run Code Online (Sandbox Code Playgroud)

perl diamond-operator

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

Perl:从<>读取

<>在Perl 中读取什么?例如,以下将做什么?

print for(<>);
Run Code Online (Sandbox Code Playgroud)

perl diamond-operator readfile

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

Java 7 Diamond 运算符上的编译错误:ArrayList&lt;&gt;();

我有这行代码:

List<IObserver<?>> observers = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

并得到以下 3 个错误:

Cannot instantiate the type ArrayList<?>
Syntax error on token "<", ? expected after this token
Type mismatch: cannot convert from ArrayList<?> to List<IObserver<?>>
Run Code Online (Sandbox Code Playgroud)

我使用的是 Eclipse 3.7,我安装了 JDK 7 update 5,并且项目设置为在构建路径中使用 JRE 系统库 [JavaSE1.7]。

传入IObserver<?>右侧的编译很好,但我必须使用菱形运算符。

我认为这是一个配置问题,但我无法弄清楚我错过了什么。

java eclipse diamond-operator

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

钻石运营商表现

我想知道在Java 7 钻石操作符与先前版本的Java的语言构造方面是否存在任何已知的性能差异.

基本上,使用它更快:

List<String> myList = new ArrayList<>()
Map<String, Integer> myMap = new HashMap<>()
Run Code Online (Sandbox Code Playgroud)

或者使用这个:

List<String> myList = new ArrayList<String>() 
Map<String, Integer> myMap = new HashMap<String, Integer>()
Run Code Online (Sandbox Code Playgroud)

它们的速度是否相同?

java diamond-operator java-7

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

为什么我不能将Java 7菱形语法与guava ImmutableSortedMap.Builder一起使用

我正在使用java 7,这个代码片段无法编译

ImmutableSortedMap<Integer, String> INT_TO_WORD =
       new ImmutableSortedMap.Builder<>(Ordering.natural())
           .put(1, "one")
           .put(2, "two")
           .put(3, "three")
           .build();
Run Code Online (Sandbox Code Playgroud)

而这一个确实如此

ImmutableSortedMap<Integer, String> INT_TO_WORD =
       new ImmutableSortedMap.Builder<Integer, String>(Ordering.natural())
           .put(1, "one")
           .put(2, "two")
           .put(3, "three")
           .build();
Run Code Online (Sandbox Code Playgroud)

为什么我需要在rhs何时指定类型lhs?是否有更多的东西给<>操作员而不是眼睛.

java diamond-operator guava java-7

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

带有通配符的泛型类型中的"只读"对象

考虑以下代码(代码中有两个问题):

import java.util.*;

public class Tree<T> {
    private T info;
    private List<Tree<? extends T>> children = new ArrayList<Tree<? extends T>>();

    public Tree<? extends T> getChildren(int n) {
        return children.get(n);
    }

    public void addChildren(Tree<? extends T> children) {
        this.children.add(children);
    }

    public static void main(String[] args) {
        Tree<?> b2; // so b2 is a reference of a Tree of unknown type
        b2 = new Tree<Number>(); /* to allow b2 to call addChildren() with Tree<? extends Number> aguments */
        b2.addChildren(new Tree<Number>()); // 1) …
Run Code Online (Sandbox Code Playgroud)

java generics wildcard readonly diamond-operator

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

Java对象定义的简写还是快捷方式?

是否有更快的方法在Java中实例化对象,而不必重新键入类?例如,看看这个实例化的大部头:

HashMap<Integer, ArrayList<ActivityRecord>> days = new HashMap<Integer, ArrayList<ActivityRecord>>();
Run Code Online (Sandbox Code Playgroud)

我喜欢这样的简写:

HashMap<Integer, ArrayList<ActivityRecord>> days = new();
Run Code Online (Sandbox Code Playgroud)

或者,我也很高兴Eclipse快捷方式自动完成实例化以使用无参数构造函数.

java eclipse diamond-operator guava

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

无法将perl脚本的输出重定向到文件

即使这个问题听起来很烦人,但我仍然坚持这一点.所描述的问题发生在Ubuntu 14.04CentOS 6.3.

我正在使用一个perl脚本netbps,在答案中发布了一个名为RedGrittyBrick:by https://superuser.com/questions/356907/how-to-get-real-time-network-statistics-in-linux-with-kb- MB-字节格式和-为

上面的脚本基本上接受了tcpdump的输出(这里有一个我们不需要知道的命令)并以不同的格式表示它.请注意,脚本在流模式下执行此操作(即,输出是在运行中生成的).

因此,我的命令如下所示:

tcpdump -i eth0 -l -e -n "src portrange 22-233333 or dst portrange 22-23333" 2>&1 | ./netbps.prl

shell /控制台上生成的输出如下所示:

13:52:09      47.86 Bps
13:52:20     517.54 Bps
13:52:30     222.59 Bps
13:52:41    4111.77 Bps
Run Code Online (Sandbox Code Playgroud)

我试图将此输出捕获到文件,但是,我无法这样做.我尝试过以下方法:

  1. 重定向到文件:

tcpdump -i eth0 -l -e -n "src portrange 22-233333 or dst portrange 22-23333" 2>&1 | ./netbps.prl > out.out 2>&1

这会创建一个空out.out文件.shell /控制台上没有输出.

  1. 管和grep:

tcpdump -i eth0 -l -e -n "src portrange …

bash shell perl diamond-operator

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

这个钻石符号的解释?

从官方Java JDK1.7指南,我得到了这个引用,但我不明白它是如何工作的.谁能解释一下?换句话说,钻石在传递空字符串时如何推断出Integer类型?

MyClass<Integer> myObject = new MyClass<>("");
Run Code Online (Sandbox Code Playgroud)

在此示例中,编译器为通用类MyClass的形式类型参数X推断类型Integer.它推断出此泛型类的构造函数的形式类型参数T的类型String.

java generics diamond-operator

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