⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch10_08.htm

📁 By Tom Christiansen and Nathan Torkington ISBN 1-56592-243-3 First Edition, published August 1998
💻 HTM
字号:
<HTML><HEAD><TITLE>Recipe 10.7. Passing by Named Parameter (Perl Cookbook)</TITLE><METANAME="DC.title"CONTENT="Perl Cookbook"><METANAME="DC.creator"CONTENT="Tom Christiansen &amp; Nathan Torkington"><METANAME="DC.publisher"CONTENT="O'Reilly &amp; Associates, Inc."><METANAME="DC.date"CONTENT="1999-07-02T01:39:47Z"><METANAME="DC.type"CONTENT="Text.Monograph"><METANAME="DC.format"CONTENT="text/html"SCHEME="MIME"><METANAME="DC.source"CONTENT="1-56592-243-3"SCHEME="ISBN"><METANAME="DC.language"CONTENT="en-US"><METANAME="generator"CONTENT="Jade 1.1/O'Reilly DocBook 3.0 to HTML 4.0"><LINKREV="made"HREF="mailto:online-books@oreilly.com"TITLE="Online Books Comments"><LINKREL="up"HREF="ch10_01.htm"TITLE="10. Subroutines"><LINKREL="prev"HREF="ch10_07.htm"TITLE="10.6. Detecting Return Context"><LINKREL="next"HREF="ch10_09.htm"TITLE="10.8. Skipping Selected Return Values"></HEAD><BODYBGCOLOR="#FFFFFF"><img alt="Book Home" border="0" src="gifs/smbanner.gif" usemap="#banner-map" /><map name="banner-map"><area shape="rect" coords="1,-2,616,66" href="index.htm" alt="Perl Cookbook"><area shape="rect" coords="629,-11,726,25" href="jobjects/fsearch.htm" alt="Search this book" /></map><div class="navbar"><p><TABLEWIDTH="684"BORDER="0"CELLSPACING="0"CELLPADDING="0"><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="228"><ACLASS="sect1"HREF="ch10_07.htm"TITLE="10.6. Detecting Return Context"><IMGSRC="../gifs/txtpreva.gif"ALT="Previous: 10.6. Detecting Return Context"BORDER="0"></A></TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="228"><B><FONTFACE="ARIEL,HELVETICA,HELV,SANSERIF"SIZE="-1"><ACLASS="chapter"REL="up"HREF="ch10_01.htm"TITLE="10. Subroutines"></A></FONT></B></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="228"><ACLASS="sect1"HREF="ch10_09.htm"TITLE="10.8. Skipping Selected Return Values"><IMGSRC="../gifs/txtnexta.gif"ALT="Next: 10.8. Skipping Selected Return Values"BORDER="0"></A></TD></TR></TABLE></DIV><DIVCLASS="sect1"><H2CLASS="sect1"><ACLASS="title"NAME="ch10-21245">10.7. Passing by Named Parameter</A></H2><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch10-pgfId-576">Problem</A></H3><PCLASS="para"><ACLASS="indexterm"NAME="ch10-idx-1000004683-0"></A><ACLASS="indexterm"NAME="ch10-idx-1000004683-1"></A><ACLASS="indexterm"NAME="ch10-idx-1000004683-2"></A>You want to make a function with many parameters easy to invoke so that programmers remember what the arguments do, rather than having to memorize their order.</P></DIV><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch10-pgfId-582">Solution</A></H3><PCLASS="para">Name each parameter in the call:</P><PRECLASS="programlisting">thefunc(INCREMENT =&gt; &quot;20s&quot;, START =&gt; &quot;+5m&quot;, FINISH =&gt; &quot;+30m&quot;);thefunc(START =&gt; &quot;+5m&quot;, FINISH =&gt; &quot;+30m&quot;);thefunc(FINISH =&gt; &quot;+30m&quot;);thefunc(START =&gt; &quot;+5m&quot;, INCREMENT =&gt; &quot;15s&quot;);</PRE><PCLASS="para">Then in the subroutine, create a hash loaded up with default values plus the array of named pairs.</P><PRECLASS="programlisting">sub thefunc {    my %args = (         INCREMENT   =&gt; '10s',         FINISH      =&gt; 0,         START       =&gt; 0,         @_,         # argument pair list goes here    );    if ($args{INCREMENT}  =~ /m$/ ) { ..... }} </PRE></DIV><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch10-pgfId-616">Discussion</A></H3><PCLASS="para">Functions whose arguments require a particular order work well for short argument lists, but as the number of parameters increases, it's awkward to make some of them optional or have default values. You can only leave out trailing arguments, never initial ones.</P><PCLASS="para">Having the caller supply value pairs is a more flexible approach. The first element of the pair is the argument name, and the second is its value. This makes for self-documenting code, because you can see the parameters' intended meanings without having to read the full function definition. Even better, programmers using your function no longer have to remember the order of the arguments and can omit any arguments.</P><PCLASS="para">This works by having the function declare a private hash variable to hold the default parameter values. Put the current arguments, <CODECLASS="literal">@_</CODE> , after the default values, so the actual arguments will override the defaults because of the order of the values in the assignment. <ACLASS="indexterm"NAME="ch10-idx-1000004685-0"></A><ACLASS="indexterm"NAME="ch10-idx-1000004685-1"></A><ACLASS="indexterm"NAME="ch10-idx-1000004685-2"></A></P></DIV><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch10-pgfId-626">See Also</A></H3><PCLASS="para"><ACLASS="xref"HREF="ch04_01.htm"TITLE="Arrays">Chapter 4, <CITECLASS="chapter">Arrays</CITE></A></P></DIV></DIV><DIVCLASS="htmlnav"><P></P><HRALIGN="LEFT"WIDTH="684"TITLE="footer"><TABLEWIDTH="684"BORDER="0"CELLSPACING="0"CELLPADDING="0"><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="228"><ACLASS="sect1"HREF="ch10_07.htm"TITLE="10.6. Detecting Return Context"><IMGSRC="../gifs/txtpreva.gif"ALT="Previous: 10.6. Detecting Return Context"BORDER="0"></A></TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="228"><ACLASS="book"HREF="index.htm"TITLE="Perl Cookbook"><IMGSRC="../gifs/txthome.gif"ALT="Perl Cookbook"BORDER="0"></A></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="228"><ACLASS="sect1"HREF="ch10_09.htm"TITLE="10.8. Skipping Selected Return Values"><IMGSRC="../gifs/txtnexta.gif"ALT="Next: 10.8. Skipping Selected Return Values"BORDER="0"></A></TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="228">10.6. Detecting Return Context</TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="228"><ACLASS="index"HREF="index/index.htm"TITLE="Book Index"><IMGSRC="../gifs/index.gif"ALT="Book Index"BORDER="0"></A></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="228">10.8. Skipping Selected Return Values</TD></TR></TABLE><HRALIGN="LEFT"WIDTH="684"TITLE="footer"><FONTSIZE="-1"></DIV<!-- LIBRARY NAV BAR --> <img src="../gifs/smnavbar.gif" usemap="#library-map" border="0" alt="Library Navigation Links"><p> <a href="copyrght.htm">Copyright &copy; 2002</a> O'Reilly &amp; Associates. All rights reserved.</font> </p> <map name="library-map"> <area shape="rect" coords="1,0,85,94" href="../index.htm"><area shape="rect" coords="86,1,178,103" href="../lwp/index.htm"><area shape="rect" coords="180,0,265,103" href="../lperl/index.htm"><area shape="rect" coords="267,0,353,105" href="../perlnut/index.htm"><area shape="rect" coords="354,1,446,115" href="../prog/index.htm"><area shape="rect" coords="448,0,526,132" href="../tk/index.htm"><area shape="rect" coords="528,1,615,119" href="../cookbook/index.htm"><area shape="rect" coords="617,0,690,135" href="../pxml/index.htm"></map> </BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -