Rspec is all about using natural language to define behavior. In this
context, I feel that lambda is sorely out of place. I was chatting on #irc and a pal of mine (wycats) proposed an interesting alternative:
As you point out, creating an alias is a one-liner.
The main reason I don’t want to add it is that lambda is a common
idiom, and I don’t want to set precedence of aliasing core Ruby idioms
just because some people don’t like the ones in Ruby.
Any chance we could get something like this into trunk?
We’ve been through this a few times on this list. There’s a
fundamental difference between replacing “assert_equal” with “should
equal” and replacing lambda with anything at all. assert_equal is a
method that a Ruby programmer wrote into a library. lambda is part of
the Ruby language. We’re still writing Ruby here, aren’t we?
Of course, you’re free to alias whatever you like in your own
projects. We’re still writing Ruby here, aren’t we!!!
On Nov 17, 2007, at 6:59 PM, aslak hellesoy wrote:
raise_error(ActiveRecord::RecordInvalid)
Chatting with other folks and they are hyped on the idea.
The main reason I don’t want to add it is that lambda is a common
idiom, and I don’t want to set precedence of aliasing core Ruby idioms
just because some people don’t like the ones in Ruby.
Couldn’t agree more with the reasoning (as per the last time). One
thing that has been circulating around my mind is an aliasing “it”
with “he”, which makes a lot of sense when you write specs from a
User’s perspective:
describe “A”, User do
he “should receiving an extra 2 dollars when he passes go”
end
Anyway - would it be reasonable for this to go into rspec core? It
seems too specific to my needs, and not central enough to specs in
general. Plus, if this were added, should “she” also be added?
Just another thing - I’ve never understood why so many find lambda to
be an unusual construction - a block is a lambda, and it is a
Proc (more or less), and those are used everywhere in the language.
As you point out, creating an alias is a one-liner.
The main reason I don’t want to add it is that lambda is a common
idiom, and I don’t want to set precedence of aliasing core Ruby idioms
just because some people don’t like the ones in Ruby.
<devil’s advocate>
But it could be argued that RSpec is a Domain Specific Language of
its own, and it’s not Ruby; it just happens to be implemented in Ruby.
</devil’s advocate>
Having said that, I’m fine with using “lambda” and even if I wasn’t
adding an alias to my spec_helper.rb would be no problem if I felt
strongly about it.
Wanted to share my initial reaction to your Ruby statement.
Are we writing Ruby here? Or are we writing specifications? Are we
not using the power of the Ruby language to construct a DSL that
allows us to construct specifications about the behaviour of our code?
Wouldn’t the ideal be that I could create Behaviour specifications
using RSpec or JSpec or CSpec (or whatever) using language that is
natural to writing specifications? So something like lambda …
which is a word I always have trouble typing … would not seem
natural to the domain of BDD?
These were just my initial thoughts
On the actual implementation side … if I really wanted doing in my
specs I would add the one line and not really care too much that this
is what I need to do.
Cheers
Shane
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.