groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rathinavelu <rathinav...@gmail.com>
Subject RE: Re: Strategy for optionally excluding a named method parameter?
Date Sun, 26 Apr 2020 05:42:20 GMT
<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word"
xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta
http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft
Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
	{font-family:Latha;
	panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0in;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;}
.MsoChpDefault
	{mso-style-type:export-only;}
@page WordSection1
	{size:8.5in 11.0in;
	margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
	{page:WordSection1;}
--></style></head><body lang=EN-US link=blue vlink="#954F72"><div
class=WordSection1><p class=MsoNormal>Sir,  I do not understand the NEED for your
explanation,Sir for I have not asked for one!!. Please go through original trigger.</p><p
class=MsoNormal>Mr.Karr was discussing  <b> correctly <o:p></o:p></b></p><p
class=MsoNormal>1. misbehavior of boolean  parameter in the middle of 24 parameters. He
is <b>correct.</b></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p
class=MsoNormal>If Boolean is lonely param it works OK. But Mr.Karr’s situation is real
use case. In the middle both false and true evaluate as false as Mr.Karr correctly points
out.</p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>So
an work around if the Boolean is last the situation is Ok </p><p class=MsoNormal>2.
calling a function with any number of parameters  involves <b>varag; </b>calling
with<b> named parameters </b>involves  <b> map. </b>They are combined
here.<b><o:p></o:p></b></p><p class=MsoNormal><b><o:p>&nbsp;</o:p></b></p><p
class=MsoNormal>Those are the problems addressed. First line of my mail</p><p
class=MsoNormal><b>Both named and varag</b><o:p></o:p></p><p
class=MsoNormal>says that.</p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p
class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>Sent
from <a href="https://go.microsoft.com/fwlink/?LinkId=550986">Mail</a> for Windows
10</p><p class=MsoNormal><o:p>&nbsp;</o:p></p><div style='mso-element:para-border-div;border:none;border-top:solid
#E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal style='border:none;padding:0in'><b>From:
</b><a href="mailto:chrisfouts@ziftsolutions.com">CFouts</a><br><b>Sent:
</b>Sunday, April 26, 2020 9:00 AM<br><b>To: </b><a href="mailto:users@groovy.apache.org">users@groovy.apache.org</a>;
<a href="mailto:davidmichaelkarr@gmail.com">David Karr</a><br><b>Subject:
</b>Re: Strategy for optionally excluding a named method parameter?</p></div><p
class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>It’s
doing what you programmed it to do.<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p
class=MsoNormal>You’re doing a “println” on the first arg (args.one), then a print
on the second arg (args.two.<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p
class=MsoNormal>So on your first 2 calls…<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p
class=MsoNormal>f(one: “string”, two: false), prints<o:p></o:p></p><p
class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp; string (the line fieed in println)<o:p></o:p></p><p
class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp; false (no linefeed)<o:p></o:p></p><p
class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>then
f(one: “string”, two: true), prints<o:p></o:p></p><p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string
(linefeed)<o:p></o:p></p><p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
true<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p
class=MsoNormal>So if you combine the outputs, it’s indeed<o:p></o:p></p><p
class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;
string (the line fieed in println)<o:p></o:p></p><p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;
false (print, no linefeed) string (linefeed)<o:p></o:p></p><p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
true<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p
class=MsoNormal>So. w/o the explanations, &nbsp;looks exactly what you have<o:p></o:p></p><p
class=MsoNormal>&nbsp;&nbsp;&nbsp; &nbsp;string<o:p></o:p></p><p
class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp; false string<o:p></o:p></p><p
class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp; true<o:p></o:p></p><p
class=MsoNormal><o:p>&nbsp;</o:p></p><div style='border:none;border-top:solid
#B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b><span style='font-size:12.0pt;color:black'>From:
</span></b><span style='font-size:12.0pt;color:black'>Rathinavelu &lt;rathinavelu@gmail.com&gt;<br><b>Reply-To:
</b>&lt;users@groovy.apache.org&gt;<br><b>Date: </b>Saturday,
April 25, 2020 at 9:23 PM<br><b>To: </b>&quot;users@groovy.apache.org&quot;
&lt;users@groovy.apache.org&gt;, &quot;users@groovy.apache.org&quot; &lt;users@groovy.apache.org&gt;,
David Karr &lt;davidmichaelkarr@gmail.com&gt;<br><b>Subject: </b>RE:
Re: Strategy for optionally excluding a named method parameter?<o:p></o:p></span></p></div><div><p
class=MsoNormal><o:p>&nbsp;</o:p></p></div><p class=MsoNormal><b>Both
named and varag</b><o:p></o:p></p><p class=MsoNormal>&nbsp;<o:p></o:p></p><p
class=MsoNormal>def f(Object[] args){ println args.one<o:p></o:p></p><p
class=MsoNormal>print args.two }<o:p></o:p></p><p class=MsoNormal>f(one:
&quot;string&quot;,two:false)<o:p></o:p></p><p class=MsoNormal>f(one:&quot;string&quot;,
two:true)<o:p></o:p></p><p class=MsoNormal>f(two:false)<o:p></o:p></p><p
class=MsoNormal>f(two:true)<o:p></o:p></p><p class=MsoNormal>f(two:
1==2)<o:p></o:p></p><p class=MsoNormal>f(two: 1==1)<o:p></o:p></p><p
class=MsoNormal>f(two: 1==2)<o:p></o:p></p><p class=MsoNormal>&nbsp;<o:p></o:p></p><p
class=MsoNormal>[string]<o:p></o:p></p><p class=MsoNormal>[false][string]<o:p></o:p></p><p
class=MsoNormal>[true][null]<o:p></o:p></p><p class=MsoNormal>[false][null]<o:p></o:p></p><p
class=MsoNormal>[true][null]<o:p></o:p></p><p class=MsoNormal>[false][null]<o:p></o:p></p><p
class=MsoNormal>[true][null]<o:p></o:p></p><p class=MsoNormal>[false]<o:p></o:p></p><p
class=MsoNormal>&nbsp;<o:p></o:p></p><p class=MsoNormal>Please
as a work around keep the <b>boolean</b> as the last parameter. Since <b>map</b>
is a subclass of &nbsp;<b>Object,</b> the function polymorphically accepts
<b>map object</b> . But why Boolean be the last to work? Sorry, Sir! I am into
groovy only from last week! A long way to go!<o:p></o:p></p><p class=MsoNormal>The
reason for always ‘false’ in the middle perhaps &nbsp;is “invisible input”. Last
output has no [null]<o:p></o:p></p><p class=MsoNormal>T.Rathinavelu<o:p></o:p></p><p
class=MsoNormal>&nbsp;<o:p></o:p></p><p class=MsoNormal>Sent
from <a href="https://go.microsoft.com/fwlink/?LinkId=550986">Mail</a> for Windows
10<o:p></o:p></p><p class=MsoNormal>&nbsp;<o:p></o:p></p><div
style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b>From:
</b><a href="mailto:mgbiz@arscreat.com">MG</a><br><b>Sent: </b>Sunday,
April 26, 2020 5:00 AM<br><b>To: </b><a href="mailto:users@groovy.apache.org">users@groovy.apache.org</a>;
<a href="mailto:davidmichaelkarr@gmail.com">David Karr</a><br><b>Subject:
</b>Re: Strategy for optionally excluding a named method parameter?<o:p></o:p></p></div><p
class=MsoNormal>&nbsp;<o:p></o:p></p><p class=MsoNormal style='margin-bottom:12.0pt'>Hi
David,<br><br>since, as was mentioned, named parameters are implemented as a map
underneath in Groovy, you should be able to remove the map entry of the parameter you do not
want to pass, though I did not try this myself...<br><br>Cheers,<br>mg<br><br><o:p></o:p></p><div><p
class=MsoNormal>On 25/04/2020 20:57, David Karr wrote:<o:p></o:p></p></div><blockquote
style='margin-top:5.0pt;margin-bottom:5.0pt'><div><div><p class=MsoNormal>&nbsp;<o:p></o:p></p></div><p
class=MsoNormal>&nbsp;<o:p></o:p></p><div><div><p
class=MsoNormal>On Sat, Apr 25, 2020 at 2:00 AM Rathinavelu &lt;<a href="mailto:rathinavelu@gmail.com">rathinavelu@gmail.com</a>&gt;
wrote:<o:p></o:p></p></div><blockquote style='border:none;border-left:solid
#CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt'><div><div><p
class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:40.8pt'>Named
parameters are not available in Groovy, say, as in Python., though they say it is. Groovy
has only mapped parameters. The earlier mail works for a single ‘named’ parameter; if
there are more parameters Groovy does not work as ‘expected’; it treats them only as positional
parameters.<o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:40.8pt'>Kindly
mail me an use-case.<o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:40.8pt'>T.Rathinavelu<o:p></o:p></p></div></div></blockquote><div><p
class=MsoNormal>&nbsp;<o:p></o:p></p></div><div><p
class=MsoNormal>The code sample looks something like this:<o:p></o:p></p></div><div><p
class=MsoNormal>&nbsp;<o:p></o:p></p></div><div><p
class=MsoNormal>&nbsp;&nbsp;&nbsp; functionName param1: value,<o:p></o:p></p></div><div><p
class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
param2: value,<o:p></o:p></p></div><div><p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
param3: value,<o:p></o:p></p></div><div><p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
param4: value,<o:p></o:p></p></div><div><p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
...<o:p></o:p></p></div><div><p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
param25: value<o:p></o:p></p></div><div><p class=MsoNormal>&nbsp;<o:p></o:p></p></div><div><p
class=MsoNormal>For instance, we need to make either the previous call or the following:<o:p></o:p></p></div><div><p
class=MsoNormal>&nbsp;<o:p></o:p></p></div><div><div><p
class=MsoNormal>&nbsp;&nbsp;&nbsp; functionName param1: value,<o:p></o:p></p></div><div><p
class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
param2: value,<o:p></o:p></p></div><div><p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
param3: value,<o:p></o:p></p></div><p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
... <o:p></o:p></p><div><p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
param25: value<o:p></o:p></p></div><div><p class=MsoNormal>&nbsp;<o:p></o:p></p></div><div><p
class=MsoNormal>Where the &quot;param4&quot; key and value are not provided.&nbsp;
Presently, we have an &quot;if&quot; checking for a condition, followed by the &quot;true&quot;
block with the first version of the function call with 25 parameters, followed by the &quot;else&quot;
and the &quot;false&quot; block with the second version, which has 24 parameters,
all the same values as in the first block, except for the one key and value not provided in
the second version.<o:p></o:p></p></div><div><p class=MsoNormal>&nbsp;<o:p></o:p></p></div></div><blockquote
style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt'><div><div><p
class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:40.8pt'>&nbsp;<o:p></o:p></p><p
class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:40.8pt'>Sent
from <a href="https://go.microsoft.com/fwlink/?LinkId=550986" target="_blank">Mail</a>
for Windows 10<o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:40.8pt'>&nbsp;<o:p></o:p></p><div
style='border:none;border-top:solid windowtext 1.0pt;padding:3.0pt 0in 0in 0in;border-color:currentcolor&#13;&#10;
                 currentcolor'><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:40.8pt'><b>From:
</b><a href="mailto:davidmichaelkarr@gmail.com" target="_blank">David Karr</a><br><b>Sent:
</b>Saturday, April 25, 2020 1:48 AM<br><b>To: </b><a href="mailto:users@groovy.apache.org"
target="_blank">users@groovy.apache.org</a><br><b>Subject: </b>Strategy
for optionally excluding a named method parameter?<o:p></o:p></p></div><p
class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:40.8pt'>&nbsp;<o:p></o:p></p><div><div><div><p
class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:40.8pt'>Lately
my only Groovy work is scripted pipelines in Jenkins, version 2.89.4 .<o:p></o:p></p></div><div><p
class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:40.8pt'>&nbsp;<o:p></o:p></p></div><div><p
class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:40.8pt'>I'm
working with an api that is somewhat dumb in one respect.&nbsp; The method we call takes
~25 parameters.&nbsp; We send them as named parameters. One of the parameters is of boolean
type.&nbsp; What we've discovered from testing is that if we send a value as either &quot;true&quot;
or &quot;false&quot;, it acts as if we sent &quot;true&quot;.&nbsp; If
we construct the call without that parameter entirely, it acts as if we sent &quot;false&quot;.
I tried making it send null, but that just causes it to fail at runtime.&nbsp; We presently
have an &quot;if&quot; for that one flag, with two calls to the method, one taking
25 parameters, the other taking 24.&nbsp; It is really obnoxious.<o:p></o:p></p></div><div><p
class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:40.8pt'>&nbsp;<o:p></o:p></p></div><div><p
class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:40.8pt'>Obviously,
the proper fix is to change their api so that it works correctly.&nbsp; The reality is,
that's not going to happen any time soon in geological terms.<o:p></o:p></p></div><div><p
class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:40.8pt'>&nbsp;<o:p></o:p></p></div><div><p
class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:40.8pt'>Is
there a concise groovy syntax we could use that would optionally include or exclude a single
parameter to the method?<o:p></o:p></p></div></div></div><p
class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:40.8pt'>&nbsp;<o:p></o:p></p><p
class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:40.8pt'>&nbsp;<o:p></o:p></p></div></div></blockquote></div></div></blockquote><p
class=MsoNormal>&nbsp;<o:p></o:p></p><p class=MsoNormal>&nbsp;<o:p></o:p></p><p
class=MsoNormal><o:p>&nbsp;</o:p></p></div></body></html>

Mime
View raw message