Perl和Ruby Hash语法

And*_*ndy 0 ruby perl hash

我是Perl的新手,在阅读了一些代码之后,我偶然发现了这句话:

my_hash{string}++
Run Code Online (Sandbox Code Playgroud)

其中my_hash变量是Hash,字符串是任意String.

我的猜测是:

my_hash{string} = string++
Run Code Online (Sandbox Code Playgroud)

任何人都可以将这行代码翻译成Ruby吗?

ike*_*ami 5

$var++;
Run Code Online (Sandbox Code Playgroud)

手段

$var = $var + 1;
Run Code Online (Sandbox Code Playgroud)

但它实际上更接近

$var = defined($var) ? $var+1 : 1;
Run Code Online (Sandbox Code Playgroud)

因为LHS被视为零(没有警告),如果它是未定义的.同样的,

$my_hash{key}++;
Run Code Online (Sandbox Code Playgroud)

相当于

$my_hash{key} = defined($my_hash{key}) ? $my_hash{key}+1 : 1;
Run Code Online (Sandbox Code Playgroud)

(在罕见的角落案件中还有一些其他细微差别,但你不关心.)


Ruby等价物是

my_hash["key"] = my_hash["key"].to_i + 1;
Run Code Online (Sandbox Code Playgroud)

要么

# If my_hash["key"] is a number,
# Or if "my_hash" was created using "my_hash = Hash.new(0)".
my_hash["key"] += 1;
Run Code Online (Sandbox Code Playgroud)
$ perl -E'
   my %my_hash;
   $my_hash{key}++;  say $my_hash{key};
   $my_hash{key}++;  say $my_hash{key};
'
1
2

$ ruby -e'
   my_hash = {};
   my_hash["key"] = my_hash["key"].to_i + 1;  p my_hash["key"];
   my_hash["key"] = my_hash["key"].to_i + 1;  p my_hash["key"];
'
1
2

$ ruby -e'
   my_hash = {};
   my_hash["key"] = 0;
   my_hash["key"] += 1;  p my_hash["key"];
   my_hash["key"] += 1;  p my_hash["key"];
'
1
2

$ ruby -e'
   my_hash = Hash.new(0);
   my_hash["key"] += 1;  p my_hash["key"];
   my_hash["key"] += 1;  p my_hash["key"];
'
1
2
Run Code Online (Sandbox Code Playgroud)