亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2601 | 回復: 6
打印 上一主題 下一主題

求助:hash value不能自動變成另一個hash的ref [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2015-04-23 17:30 |只看該作者 |倒序瀏覽
本帖最后由 午夜凋零 于 2015-04-23 17:31 編輯
  1. my %hash;
  2. $hash{"abc"} = 1;
  3. print Dumper(\%hash);
  4. $hash{"abc"}->{"a"} = "b";
  5. print Dumper(\%hash);
復制代碼
這樣寫,會報一個ERROR或者Warning:
  1. Can't use string ("1") as a HASH ref while "strict refs" in use at ./0423 line 30, <$fi> line 4.
復制代碼
在中間加上一行,或者將第2行那個1改為{},都可以通過。
  1. my %hash;
  2. $hash{"abc"} = 1; # or change 1 to {}
  3. print Dumper(\%hash);
  4. $hash{"abc"} = {}; # new add
  5. $hash{"abc"}->{"a"} = "b";
  6. print Dumper(\%hash);
復制代碼
有點想不明白是怎么回事,為什么hash不能自動將那個value 1變?yōu)橐粋hash的ref?
求教,不勝感謝~~

求職 : 軟件工程師
論壇徽章:
3
程序設計版塊每日發(fā)帖之星
日期:2015-10-07 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-12-13 06:20:00程序設計版塊每日發(fā)帖之星
日期:2016-05-05 06:20:00
2 [報告]
發(fā)表于 2015-04-23 17:52 |只看該作者
本帖最后由 104359176 于 2015-04-23 17:55 編輯

這是 Perl 語言中很容易出錯的地方,因為數(shù)組和散列提取元素時的名稱和不提取元素時的名稱不一致:

以下兩種寫法是正確的:
  1. my %hash;

  2. $hash{'key'}{'value'} = 1;
復制代碼
  1. my $hash = {};

  2. $hash->{'key'}{'value'} = 1;
復制代碼
所以你的代碼是因為 -> 放錯了位置:
  1. my %hash;
  2. $hash{"abc"} = 1; # or change 1 to {}
  3. print Dumper(\%hash);
  4. $hash{"abc"} = {}; # new add
  5. $hash{"abc"}{"a"} = "b";
  6. print Dumper(\%hash);
復制代碼
在 Perl 6 中,這個坑被填平了:
  1. my %hash;
  2. %hash{'key'}{'value'} = 1;

  3. my $hash = {};
  4. $hash{'key'}{'value'} = 1;
復制代碼

論壇徽章:
46
15-16賽季CBA聯(lián)賽之四川
日期:2018-03-27 11:59:132015年亞洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49雙魚座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亞冠之布里斯班獅吼
日期:2015-07-13 10:44:56
3 [報告]
發(fā)表于 2015-04-23 23:38 |只看該作者
有點想不明白是怎么回事,為什么hash不能自動將那個value 1變?yōu)橐粋hash的ref?


把 1 自動變 hashref 是怎么個邏輯,腦袋秀逗了?

autovivification 特性是有嚴格要求的,只對不存在的或值為undef 的項自動生hashref 或 arrayref。

你這里 1 明顯不是 undef 是個有意義的值,按你想的那類型系統(tǒng)也太隨意了,怎么能悄無聲息的擦除我有用的值,我只是拼寫錯誤怎么辦?當然如果你不開 use strict; 那代碼會成功執(zhí)行的,只是變成符號引用多了個 %1 全局變量。。∵@是個錯誤示范,永遠用 use strict;

autovivification

    A Graeco-Roman word meaning “to bring oneself to life”. In Perl, storage locations (lvalues) spontaneously generate themselves as needed, including the creation of any hard reference values to point to the next level of storage. The assignment $a[5][5][5][5][5] = "quintet" potentially creates five scalar storage locations, plus four references (in the first four scalar locations) pointing to four new anonymous arrays (to hold the last four scalar locations). But the point of autovivification is that you don’t have to worry about it.
AV



二樓人很熱心,不過這里吐槽偏太遠了  和 -> 沒有關系,兩級索引之間的 -> 可以省略,因為只要是兩級索必定要解引用

論壇徽章:
0
4 [報告]
發(fā)表于 2015-04-29 11:26 |只看該作者
104359176 發(fā)表于 2015-04-23 17:52
這是 Perl 語言中很容易出錯的地方,因為數(shù)組和散列提取元素時的名稱和不提取元素時的名稱不一致:

以下 ...


非常感謝你的回答。

好像你沒有理解我的意思,我的code中,hash是一個哈希,不是變量,因此,那個->的位置并沒有錯,如果寫成$hash->{'a'}{'b'},此時hash就是一個變量了,不是哈希了。

論壇徽章:
0
5 [報告]
發(fā)表于 2015-04-29 11:35 |只看該作者
回復 3# zhlong8

感謝版主解答,學習到了。
當初設了一個1,主要是想在那里站個位子,沒想到后續(xù)出現(xiàn)這么多問題。

   

論壇徽章:
0
6 [報告]
發(fā)表于 2015-04-29 11:37 |只看該作者
你可以通過賦值來把1變?yōu)槟阆胍膆ashref.
  1. $hash{"abc"}= {"a" =>"b" };
復制代碼
版主解釋的很清楚了,計算機沒有權利自動來擦除你已賦予的值,這不合理

論壇徽章:
0
7 [報告]
發(fā)表于 2015-04-29 12:47 |只看該作者
回復 6# kk861123


    嗯。明白了,很感謝你的回答,謝謝。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP