Chinaunix

标题: 一句代码解析,关于Sub的使用 [打印本页]

作者: evel    时间: 2013-06-01 11:49
标题: 一句代码解析,关于Sub的使用
初学者问问题:

my( $yy, $mm ,$dd ) = sub {($_[5]+1900, $_[4]+1, $_[3])}->(localtime);

不理解这里的sub的用法,sub{($v1,$v2,$v3)}->(localtime);
这里是列表上下文,localtime返回

   #  0    1      2       3         4       5       6        7        8
    ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)

->的作用是什么?赋值?
sub这里没用用函数名?为什么?函数体怎么是一个列表而已?

如果我需要理解,有什么好资料可以推荐?
作者: kjeldahl    时间: 2013-06-01 12:41
sub  {}匿名函数,看成是$coderef->(args)就行了,args是localtime返回值,这个$coderef->(args)返回一个3值列表
作者: yakczh_cu    时间: 2013-06-01 16:04
$a=sub{($v1,$v2,$v3)};

$b=$a->(localtime);
两步并成一步
作者: moonlucifer    时间: 2013-06-01 18:56
给力啊, 学习了. 可以比较方便的针对列表中不同元素做不同的操作....
作者: evel    时间: 2013-06-02 12:15
先执行应该是localtime,这里->是解子程序应用。localtime返回的的列表作为参数列表转递给sub函数,

但中间的sub使用我不是很熟悉。

什么叫匿名函数?为什么要有这种函数?主要是干啥用的?有啥好处?顶起来,希望高手给个通俗易懂的解释。谢谢!


作者: wsxedcer    时间: 2013-06-03 08:21
先看看书吧,都有讲的
作者: rubyish    时间: 2013-06-03 20:38
  1. my( $yy, $mm ,$dd ) = sub {($_[5]+1900, $_[4]+1, $_[3])}->(localtime);
复制代码
谢谢!学习了!
作者: 唐归来    时间: 2013-06-03 21:10
不是很理解,
作者: picbhan    时间: 2013-06-03 21:21
受教了,以前真没注意到这种写法。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2