小编Jim*_*Jim的帖子

Kotlin在数据类中的复制是浅复制吗?

所以我有以下数据类:

data class Client(val name: String, val pastAddresses: ArrayList<String>)
Run Code Online (Sandbox Code Playgroud)

从以下代码:

val aClient = Client("Alice", arrayListOf("foo", "bar"))
println(aClient)
val cClient = aClient.copy()
cClient.pastAddresses.add("Blah")
cClient.pastAddresses.remove("foo")
println(aClient)  
Run Code Online (Sandbox Code Playgroud)

我懂了:

Client(name=Alice, pastAddresses=[foo, bar])
Client(name=Alice, pastAddresses=[bar, Blah])
Run Code Online (Sandbox Code Playgroud)

这意味着Kotlin的数据类中的复制是浅复制。
有没有办法进行深复制?

kotlin

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

从 Double.toLongBits 创建的 long 中获取双精度值

有没有办法将long我从Double.toLongBits后面得到的 a 反转为 a Double
以下不起作用:

Double n = 171.30672219;
System.out.println(Double.doubleToLongBits(n));
System.out.println(new Double(Double.doubleToLongBits(n)));  
Run Code Online (Sandbox Code Playgroud)

这打印:

4640231336019091517
4.6402313360190915E18

虽然我想找回171.30672219

java double types decimal long-integer

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

Perl 中的字节序列

我有一个数组,数组中的每个项目都是一个由 2 个数字组成的数组,其值在 16 位范围内。
对于数组中的每一项,我需要将这 2 个数字放入一个 32 位整数中,然后将其保存在 MySQL 数据库表中的类型为 的列中varbinary

我想我需要使用pack模板S!来创建一个 32 位整数,其中包含高/低 16 位中的其他 2 个数字。
我想我需要使用pack模板来I!创建要保存在数据库中的最终值。
但我不确定如何做到这一点,pack而且我不太理解文档中有关如何形成循环的示例。

my( $ip, $cs,
    $flags,$fl,$fh,
    $ax,$al,$ah, $bx,$bl,$bh, $cx,$cl,$ch, $dx,$dl,$dh, 
    $si, $di, $bp, $ds, $es ) =
unpack( 'v2' . ('vXXCC' x 5) . 'v5', $frame );
 
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我如何pack实现这个吗?或者pack这两种情况都不是正确的解决方案?

例如,要创建一个 32 位数字,请使用以下代码片段:

my $number1 = 120;
my $number2 = 3090;
my $word = …
Run Code Online (Sandbox Code Playgroud)

binary perl integer pack

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

删除暂存文件并重置为原始版本

如果我在暂存区域中有一个文件(显示在 中git diff --cached)并且我想完全删除它,我该怎么做?
正在做

git reset HEAD -- file  
git checkout -- file  
Run Code Online (Sandbox Code Playgroud)

是的,但是这 2 个操作有 1 个命令吗?

git git-reset git-stage

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

管道到perl进行排序和管道到其他命令

以下代码段对版本号进行排序.我在脚本中测试它似乎是正确的.

sort {
       my @left  = split( /\./, $a );
       my @right = split( /\./, $b );

       if ( $left[0] <=> $right[0] ) {
          return $left[0] <=> $right[0];
       }

       if ( $left[1] <=> $right[1] ) {
            return $left[1] <=> $right[1] 
        }
        elsif ( @left < @right ) {
            return -1;
        }

        return @left < @right ? -1 : 1;
} @versions  
Run Code Online (Sandbox Code Playgroud)

如何使这个更简洁/更简洁,并在管道序列中运行它.
numbers_generator | perl -e SORT_HERE | other_command

perl

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

Json对perl无效,但jq无效

为什么以下字符串作为JSON与jq一起传递但不与perl一起传递?
例:

$ cat dummy.json | jq '.'  
{  
  "field": {  
    "customer_id": "abc"  
  },    
  "result": "processed"  
}  
Run Code Online (Sandbox Code Playgroud)

但是perl失败了:

$ cat dummy.json | perl -MData::Dumper -MJSON=decode_json -ne'print decode_json($_)'  
, or } expected while parsing object/hash, at character offset 1 (before "\n") at -e line 1.  
Run Code Online (Sandbox Code Playgroud)

我在这里搞砸了什么?

perl json

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

不能用一个替换多个空行

为什么以下不能用一个替换多个空行?

$ cat some_random_text.txt  
foo   



bar   




test  
Run Code Online (Sandbox Code Playgroud)

这不起作用:

$ cat some_random_text.txt | perl -pe "s/\n+/\n/g"
foo  



bar  





test  
Run Code Online (Sandbox Code Playgroud)

我试图将多个新行(即空行)替换为一个空的新行,但我使用的正则表达式不起作用,如您在示例代码段中所示.
我搞砸了什么?

预期结果是:

foo

bar

test
Run Code Online (Sandbox Code Playgroud)

regex perl

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

如何格式化perl oneliner?

如果我有一个perl one liner从命令行运行它:例如

perl -MData::Dumper -MJSON=decode_json -e 'my @array = @{decode_json($data)}; foreach my $i (@array) { etc }'
Run Code Online (Sandbox Code Playgroud)

我怎么能格式化它以便它更易读,即添加新行?如果我这样做:

当我添加这样的新行来格式化代码时,命令会中断

shell perl

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

为什么排序在脚本中失败但在单行中没有?

以下代码段正常:

cat versions.txt | perl -Mversion -le'  
   chomp( @a = <> );  
   print for sort { $left = $a; $right = $b; $left =~ s!^\D+!!; $right =~ s!^\D+!!; version->parse($left) cmp version->parse($right) } @a;  
'     
Run Code Online (Sandbox Code Playgroud)

以下代码没有,但我不明白为什么.它们似乎实际上是相同的代码.

use strict;  
use warnings;  
use version;  

chomp(my @versions = <>);  
@versions = sort { version->parse($a =~ s/^\D+//r) cmp version->parse($b =~ s/^D+//r) } @versions;   
print $_."\n" for @versions;  
Run Code Online (Sandbox Code Playgroud)

我明白了:

脚本第7行的版本格式无效(非数字数据)

perl

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

对 n 的幂执行会产生负指数的错误结果

在以下(简单的)pow(x, n)方法实现中,完全忽略任何优化方法,我发现以下问题:

public double pow(double x, int n) {  
  boolean negative = n < 0;  
  long power = Math.abs(n);  
  double ans = 1.0;  
  for(long i = 0; i < power; i++) {  
    ans = ans * x;  
  }    
  return negative ? 1.0/ans: ans;  
}  
Run Code Online (Sandbox Code Playgroud)

在这里,我假设对于负指数的情况,我只需计算x^n然后返回,1/(x^n)因为例如2^(-3) = 1/(2^3)

问题:
代码在以下情况下失败:
pow(2.00000, -2147483648)
输出是1.00000,而预期的正确结果是0.00000

如果我将代码更改如下:

public double pow(double x, int n) {  
  long power = n;  
  if(power < 0) {  
    x = …
Run Code Online (Sandbox Code Playgroud)

java algorithm math division exponent

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

从STDIN输入到数组

以下所有内容似乎都有效.但是等价吗?

方法1:

chomp(my @array = <STDIN>); 
Run Code Online (Sandbox Code Playgroud)

方法2:

my @array;  
chomp(@array = <>);   
Run Code Online (Sandbox Code Playgroud)

方法3:

chomp(my @array = <>);  
Run Code Online (Sandbox Code Playgroud)

perl

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