LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2214|回复: 23

我对@array=1的解释

[复制链接]
发表于 2004-4-29 12:25:32 | 显示全部楼层 |阅读模式

  1. 在Perl中,大家都知道有多种常见的变量数据类型,标量(scalar),数组(array),
  2. 散列(hash),另外还有reference,typeglob,undef
  3. 但是,你们知道有还有常量的数据类型吗?
  4. 比如:use constant PI => 3.1415926;定义的常量
  5.      print PI;试试
  6.      (1,2,3,4);定义的列表
  7.      print (1,2,3,4)[2]看看结果是什么?

  8. 可能很多人对 $,@,% 非常了解了,但是却不知道他们
  9. 的真正的意思,大多数的书本上会介绍说,这些是表示被赋值的数据类型,他们认为
  10. $scalar = 'adf';
  11. @array = (1,2,3);
  12. %hash = (1=>2,3=>4);
  13. 这样才是正规的赋值方法,但是却不是

  14. 其实,'adf'是一个常量,是字符常量,(1,2,3)是一个列表,也是常量,你无法对修
  15. 改她的,(1=>2,3=>4)这个格式有一点特殊,而且我也不知道是什么名字,但是她其实
  16. 是一种含有偶数个元素的数组的变形,而且必须是偶数的个数的数组(所有才有了=>的
  17. 变形,来约束一些条件),也是常量,hash很多时候也被翻译为哈希数组的,其实%hash
  18. = (1,2,3,4)也是正确的,所以前面的$,@,%只是分别表示名称为scalar,array,
  19. hash的变量的数据类型分别是标量,数组,散列,他并不表示后面的'adf'是标量,
  20. (1,2,3)是数组,(1=>2,3=>4)是散列,好像就讲不通了

  21. 下面举一个例子:

  22. @array = 1;
  23. 他表示把 1 赋给了一个数组,所以,因为我们不能够直接对一个常量 1 访问(也就是要
  24. 指定他的内存基址了),所有我们要借用变量来达到目的,这里就是借用了一个数组做中介
  25. $array[0]就可以了,当然在$array = 1;中,你是借用了标量做中介的,也可以,但是
  26. 他并不是说 1 是标量(应该是常量),其实他与$array的类型也不一样,经过了类型转换
  27. 但是,在 @array = 1; 的情况下,我们不会使用标量的访问方法来访问他,因为 1 和标
  28. 量根本没有任何联系。
复制代码
发表于 2004-4-29 14:39:28 | 显示全部楼层
@array=(1);
发表于 2004-4-29 14:54:57 | 显示全部楼层
(1=>2,3=>4)这个格式有一点特殊,而且我也不知道是什么名字。但是她其实
是一种含有偶数个元素的数组的变形,而且必须是偶数的个数的数组


“=>”就是“,”,换一种写法是为了程序易读。
你可以试试:
@array = (1 => 2 => 3);
看看行不行。

关于@array=1没什么好解释的,你觉得对你用就是了。
反正我是不会把这种写法推荐给别人的。
发表于 2004-4-29 15:00:47 | 显示全部楼层
最初由 BBDD 发表

关于@array=1没什么好解释的,你觉得对你用就是了。
反正我是不会把这种写法推荐给别人的。


是呀,是呀,在列表上下文里就当列表处理好了。呵呵>>>
 楼主| 发表于 2004-4-29 16:18:15 | 显示全部楼层
  1. #!/usr/bin/perl -w
  2. use strict;
  3. my @array = 1;
  4. print @array;
复制代码


你说?错在哪里了?Perl解析器都没有说错,你说错在哪里?

  1. 关于@array=1没什么好解释的,你觉得对你用就是了。
  2. 反正我是不会把这种写法推荐给别人的。
复制代码

但是,你说这种方法是错误的,就是你的错了,Perl解析器没有说错,就是没有错,如果说不符合习惯那还差不多

不推荐?我推荐了吗?我举的例子里面使用了两个
@array = [1,2,3,4]
@array = (1,2,3,4)
两个看起来类似的东西比较了一下,你就有高见了,而且来了一个错的,真强

如果我说你
  1. “=>”就是“,”,换一种写法是为了程序易读。
  2. 你可以试试:
  3. @array = (1 => 2 => 3);
  4. 看看行不行。
复制代码

你推荐@array = (1 => 2 => 3);了,是不是你也在搞混乱呢?

你这种人啦?见多了,拿着书死啃,本来早先我就看到那个帖子了,我都不想回的,看到后来实在看不下去了,说的不在路上,我才回的
 楼主| 发表于 2004-4-29 16:28:14 | 显示全部楼层
交流经验的时候就应该这样,才有氛围呀
发表于 2004-4-29 16:44:02 | 显示全部楼层
@a=(1=>2=>3);
没问题呀。
,和 => 基本上是同义词哦。
发表于 2004-4-29 16:50:42 | 显示全部楼层
请教楼主 @a=[1=>2=>3]; 是什么意思?
发表于 2004-4-29 18:50:44 | 显示全部楼层

讨论问题怎么开骂起来了
讨论问题的时候言辞稍微激烈点很正常
大家都是抱着交流共同进步的目的来的
何必开骂呢
ft
发表于 2004-4-29 18:55:07 | 显示全部楼层
最初由 tojeff 发表
如果说不符合习惯那还差不多

不推荐?我推荐了吗?我举的例子里面使用了两个
@array = [1,2,3,4]
@array = (1,2,3,4)
两个看起来类似的东西比较了一下


呵呵
我个人认为tojeff兄举的这个例子来说明引用,虽然你举的例子是对的,的确有点容易让不太明白引用的人更加混乱
呵呵
我perl初学
说错勿怪
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表