我是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吗?
$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)