I know I can use “a ||= b” to assign b to a if a is nil.
But what about an equivalent to
a = b if b
Does that exist in a DRYer form?
I know I can use “a ||= b” to assign b to a if a is nil.
But what about an equivalent to
a = b if b
Does that exist in a DRYer form?
On 8/28/07, Jay L. [email protected] wrote:
I know I can use “a ||= b” to assign b to a if a is nil.
But what about an equivalent to
a = b if b
a &&= b will almost get you there
if a is not nil or false and b is not nil or false then a = b, but if
a is nil or false and b is not nil or false then a = a. So if you can
guarantee that a will always be truthy then you can do it. I’d stick
to a = b if b for sanity’s sake.
Hi Jay
On 29 Aug 2007, at 00:30, Jay L. wrote:
a = b if b
Does that exist in a DRYer form?
Best I could come up with just now was:
a = b || a
a = 123
=> 123
b = nil
=> nil
a = b || a
=> 123
a
=> 123
b = 456
=> 456
a = b || a
=> 456
a
=> 456
Cheers.
Douglas F Shearer
[email protected]
On 8/28/07, Douglas F Shearer [email protected] wrote:
a = b || a
a = b if b
Not really DRYer :), you just repeat a instead of b
On Aug 28, 8:00 pm, [email protected] wrote:
I don’t have the feeling that I’m repeating myself; the two b’s both
pull their weight. So I wouldn’t worry about it, from the DRY
perspective.
Yeah, it was more that I was doing a bunch of them at once to deal
with Rails’ attr_protected feature while in a unit test, so I ended up
writing:
user.login = options[:login] if options[:login]
user.password = options[:password] if options[:password]
user.other = options[:other] if options[:other]
Felt kinda repetitive. I guess I could DRY that up in an eval loop.
Hi –
On Wed, 29 Aug 2007, Logan C. wrote:
a = b || a
a = b if b
Not really DRYer :), you just repeat a instead of b
I have to say, when I type this:
a = b if b
I don’t have the feeling that I’m repeating myself; the two b’s both
pull their weight. So I wouldn’t worry about it, from the DRY
perspective.
David
On 8/28/07, Jay L. [email protected] wrote:
Felt kinda repetitive. I guess I could DRY that up in an eval loop.
Is this not what #attributes= is for?
user.attributes = options
On Aug 28, 10:31 pm, “Logan C.” [email protected] wrote:
Is this not what #attributes= is for?
user.attributes = options
Nope! That won’t assign any attributes that are attr_protected.
Jay L. wrote:
user.login = options[:login] if options[:login]
user.password = options[:password] if options[:password]
user.other = options[:other] if options[:other]Felt kinda repetitive. I guess I could DRY that up in an eval loop.
No need for eval…
[:login, :password, :other].each do |key|
user.send “#{key}=”, options[key] if options.key?(key)
end
On Wed, 29 Aug 2007 08:53:19 +0900, Logan C. wrote:
a = b || a
a = b if b
Not really DRYer :), you just repeat a instead of b
But a is defintiely a variable, while b may be a function call.
In a = b if b, you compute the function twice.
In a = b or a, you compute the function only once.
–Ken
On Aug 28, 10:34 pm, Joel VanderWerf [email protected] wrote:
user.send “#{key}=”, options[key] if options.key?(key)
end
Perfect! In fact, I’ll go even better:
User.protected_attributes.each do |key|
user.send “#{key}=”, options[key] if options.key?(key)
end
Now I don’t have to update my tests when I add attr_protected
attributes to my model.
On 29 Aug 2007, at 14:40, Ken B. wrote:
Best I could come up with just now was:
a = b || a
a = b if b
Not really DRYer :), you just repeat a instead of bBut a is defintiely a variable, while b may be a function call.
In a = b if b, you compute the function twice.
In a = b or a, you compute the function only once.
Took the words right out of my mouth, I must read my email more
frequently…
Douglas F Shearer
[email protected]
On 8/29/07, Ken B. [email protected] wrote:
Best I could come up with just now was:
a = b || a
a = b if b
Not really DRYer :), you just repeat a instead of bBut a is defintiely a variable, while b may be a function call.
In a = b if b, you compute the function twice.
In a = b or a, you compute the function only once.
Methods that are expensive and/or have side effects should probably
not be named b
On Thu, 30 Aug 2007 23:40:39 -0700, aalfred wrote:
I had those two cases:
foo = bar if !bar.nil? # (case 1) or
foo = bar if foo.nil? && !bar.nil? # (case 2)and rewrote them into:
foo ??= bar # case 1
foo !!= bar # case 2
Neat - you did that with superators? Or some other way?
Jay
On Aug 31, 12:40 am, aalfred [email protected] wrote:
foo ??= bar # case 1
foo !!= bar # case 2
How did you do that, given that those operators are (as you say) non-
existing, and the code in your resulting code produces a syntax error
(under 1.8.6, anyhow)? Did you modify the Ruby source?
On Aug 29, 1:25 am, Jay L. [email protected] wrote:
I know I can use “a ||= b” to assign b to a if a is nil.
But what about an equivalent to
a = b if b
Does that exist in a DRYer form?
Recently I had a similar problem. After some refactoring of code
I rewrote the code with two (non-existing, but very DRY operators)
I had those two cases:
foo = bar if !bar.nil? # (case 1) or
foo = bar if foo.nil? && !bar.nil? # (case 2)
and rewrote them into:
foo ??= bar # case 1
foo !!= bar # case 2
While this is not the same as your problem, it is quite similar.
I looks as this is not a completely isolated problem. Probably
because so many want to DRY their code. It looks like baroqueness
of code can survive only in the names of methods and variables
Alfred
On 9/2/07, Phrogz [email protected] wrote:
foo ??= bar # case 1
foo !!= bar # case 2How did you do that, given that those operators are (as you say) non-
existing, and the code in your resulting code produces a syntax error
(under 1.8.6, anyhow)? Did you modify the Ruby source?
I don’t think he did any such thing. I think when he says he rewrote
it, he means just that, he rewrote it, not that it actually worked or
anything
I’ve not yet seen the right answer on the original question:
“idiomatic way to assign if not nil?”.
Since false isn’t nil, a||=b can’t a correct answer, AFAIK.
A good answer could be:
a=b if a.nil?
gegroet,
Erik V. - http://www.erikveen.dds.nl/
On Sunday 02 September 2007 09:21:25 am Erik V. wrote:
Erik V. - http://www.erikveen.dds.nl/
False isn’t nil, but nil is false.
I really enjoyed the article. It proved to be Very helpful to me and I
am sure to all the comment here!
http://www.dealsourcedirect.com/ion-tape2pc.html
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.
Sponsor our Newsletter | Privacy Policy | Terms of Service | Remote Ruby Jobs