Ruby style question (many-arg methods)

N

Nick Green

If you are calling a method that takes a lot of arguments and starts a
block, how do you make that look pretty?

i.e.

Net::SSH.start(server,user,:password=>password,:port=>port,:eek:ther_stuff
=> somevariable, :foo => bar, :baz => qux) do |ssh|

Thats big and ugly and may or may not be > 80 and/or > 120 columns. I
have worked on code that does this:

Net::SSH.start(
server,
user,:
password=>password,
:port=>port,
:eek:ther_stuff => somevariable,
:foo => bar,
:baz => qux) do |ssh|


Which looks OK, except the code of the block continues on the same
indentation as the arguments, which (to me) makes it harder to read
quickly, i.e.


Net::SSH.start(
server,
user,:
password=>password,
:port=>port,
:eek:ther_stuff => somevariable,
:foo => bar,
:baz => qux) do |ssh|
foo = foo = new_foo
end

(ignore the actual functionality, lets assume noone is actually doing
something this silly :p)

This to me illustrates the point that its tricky to make out. I have
worked on a lot of C/C++ code that uses GNU-like style and does this :


Net::SSH.start(
server,
user,:
password=>password,
:port=>port,
:eek:ther_stuff => somevariable,
:foo => bar,
:baz => qux)
{
foo = new_foo
}

(just pretend that you can actually start a C block with NET::SSH.start,
actually this would be something like if
(complexFunction(blah,blah,blah))

Which looks nice i suppose but... uh... thats not ruby code, with ruby
you would need a \ after the closing paren, and you'd need to declare
your variables your passing to the block somewhere, like:

Net::SSH.start(
server,
user,:
password=>password,
:port=>port,
:eek:ther_stuff => somevariable,
:foo => bar,
:baz => qux) \
{ |ssh|
foo = new_foo
}

or

Net::SSH.start(
server,
user,:
password=>password,
:port=>port,
:eek:ther_stuff => somevariable,
:foo => bar,
:baz => qux) \
do |ssh|
foo = new_foo
end

Currently I use the last one, because that way at least there is a sort
of ruby-ish block. But the "conceptual decoupling" of the function from
the block trips me up occasionally.

Anyway, just got frustrated reading old code and was wondering if anyone
had a good solution for me ;p
 
N

Nick Green

Currently I use the last one, because that way at least there is a sort
of ruby-ish block. But the "conceptual decoupling" of the function from
the block trips me up occasionally.

Anyway, just got frustrated reading old code and was wondering if anyone
had a good solution for me ;p

Oops, wrote this all out of whack, currently I use this:

Net::SSH.start(
server,
user,:
password=>password,
:port=>port,
:eek:ther_stuff => somevariable,
:foo => bar,
:baz => qux) do |ssh|
foo = new_foo
end

But thats a weird half-indentation thing and I dno how I feel about it,
would maybe work if ruby indentatino were 4-space. I've tried the last
one (above) recently but the aforementioned decoupling trips me up
 
E

Ehsanul Hoque

Well=2C you should realize that leading whitespace on each new line is remo=
ved in emails and the like. So use some web service instead=2C like pastie.=
I assume you mean you use this method currently: http://pastie.org/676220

Well=2C I might do something like this (but I'm sure many would consider th=
at ugly - just a personal preference really): http://pastie.org/676224
Date: Fri=2C 30 Oct 2009 11:22:12 +0900
From: (e-mail address removed)
Subject: Re: Ruby style question (many-arg methods)
To: (e-mail address removed)
=20
=20
=20
Oops=2C wrote this all out of whack=2C currently I use this:
=20
Net::SSH.start(
server=2C
user=2C:
password=3D>password=2C
:port=3D>port=2C
:eek:ther_stuff =3D> somevariable=2C
:foo =3D> bar=2C
:baz =3D> qux) do |ssh|
foo =3D new_foo
end
=20
But thats a weird half-indentation thing and I dno how I feel about it=2C= =20
would maybe work if ruby indentatino were 4-space. I've tried the last=20
one (above) recently but the aforementioned decoupling trips me up
--=20
Posted via http://www.ruby-forum.com/.
=20
=20
_________________________________________________________________
Windows 7: I wanted more reliable=2C now it's more reliable. Wow!
http://microsoft.com/windows/windows-7/default-ga.aspx?h=3Dmyidea?ocid=3DPI=
D24727::T:WLMTAGL:ON:WL:en-US:WWL_WIN_myidea:102009=
 
N

Nick Green

Ehsanul said:
Well, you should realize that leading whitespace on each new line is
removed in emails and the like. So use some web service instead, like
pastie. I assume you mean you use this method currently:
http://pastie.org/676220

Well, I might do something like this (but I'm sure many would consider
that ugly - just a personal preference really): http://pastie.org/676224

Ah, yes I was using this via firefox not as a ML, and firefox preserved
the indenting. Your pastie guess is spot on though, thanks :)

I have used the method you pastied for a long time, I switched partially
because for some big-ole-method-calls I like to add
comments-per-argument.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,969
Messages
2,570,161
Members
46,705
Latest member
Stefkari24

Latest Threads

Top