免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4346 | 回复: 6

学习mojo源码的问题 [复制链接]

论坛徽章:
0
发表于 2018-03-17 14:24 |显示全部楼层
请问mojo::collection 中each方法的 $_->$cb($i++) for @$self中$_不是引用为什么可以这么用?

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
发表于 2018-03-19 08:37 |显示全部楼层
$_为何不是引用?

论坛徽章:
46
15-16赛季CBA联赛之四川
日期: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
发表于 2018-03-19 11:25 |显示全部楼层
类方法就是 字符串->method,
可以是直接的 Module::A->method
也可以是 ”Module::A"->method
还可以是是 $m = "module::A"; $m->method;

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
发表于 2018-03-20 08:18 |显示全部楼层
This is Sub Ref As Method

  1. $method->( $head, @tail );
复制代码


EQ

  1. $head->$method(@tail);
复制代码

  1. $_->$cb($i++);
  2. $cb->( $_, $i++ );
复制代码

leisi UFCS (Uniform Function Call Syntax)
https://en.wikipedia.org/wiki/Uniform_Function_Call_Syntax

du:
perldoc perlobj

评分

参与人数 1信誉积分 +6 收起 理由
523066680 + 6 很给力!

查看全部评分

论坛徽章:
46
15-16赛季CBA联赛之四川
日期: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
发表于 2018-03-20 11:36 |显示全部楼层
头一次见,还真有这么用的。这两种我都不知道

Subroutine References as Methods
You can also use a subroutine reference as a method:
  my $sub = sub {
      my $self = shift;

      $self->save();
  };

  $file->$sub();
This is exactly equivalent to writing $sub->($file) . You may see this idiom in the wild combined with a call to can :
  if ( my $meth = $object->can('foo') ) {
      $object->$meth();
  }
Dereferencing Method Call
Perl also lets you use a dereferenced scalar reference in a method call. That's a mouthful, so let's look at some code:
  $file->${ \'save' };
  $file->${ returns_scalar_ref() };
  $file->${ \( returns_scalar() ) };
  $file->${ returns_ref_to_sub_ref() };
This works if the dereference produces a string or a subroutine reference.

论坛徽章:
0
发表于 2018-03-20 17:27 |显示全部楼层
回复 4# rubyish

十分感谢!!!

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
发表于 2018-04-04 19:35 |显示全部楼层
biru:

  1. push( array, elem )
  2. array.push(elem)
复制代码

  1. $push->( $array, @elem );
  2. $array->$push(@elem);
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP