[ruby-core:69326] [Ruby trunk - Feature #11167] Allow an attr_ variant for query-methods that end with a question mark '?' character, such as: def foo? returning @foo

From: duerst@...
Date: 2015-05-23 11:28:59 UTC
List: ruby-core #69326
Issue #11167 has been updated by Martin D=C3=BCrst.


Daniel Berger wrote:
> Abandoned all hope:
>=20
> http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/5796
>=20
> https://www.ruby-forum.com/topic/135195

I think that this shows that there are several people who really like to us=
e a foo? getter with a foo=3D setter. What it doesn't show that there are e=
nough such people that it would balance out the confusion for those who thi=
nk that a foo=3D setter goes together with a foo getter, at least by defaul=
t.

With the current state, the main case is covered, nobody gets confused, and=
 those who want a foo?/foo=3D pair can easily get it either as Matz showed =
above (easily reduced to one line) or by redefining the attr_... methods; t=
he later is also very easy as it is usually about the first example given w=
hen explaining metaprogramming.

----------------------------------------
Feature #11167: Allow an attr_ variant for query-methods that end with a qu=
estion mark '?' character, such as:  def foo?   returning @foo
https://bugs.ruby-lang.org/issues/11167#change-52594

* Author: Robert A. Heiler
* Status: Open
* Priority: Normal
* Assignee:=20
----------------------------------------
Hi guys,

Hi nobu :)

Also hi matz if matz reads this, and of course the rest of the core
team and everyone else.

Today on IRC, this mini-discussion happened (I show a snippet):

~~~
<apeiros> I really miss attr_query or whatever you want to name it
<apeiros> which would generate a ? method too
<jhass> apeiros: crystal has :P getter?
<apeiros> nice
~~~

Ok, so the language crystal has something ruby does not have.

We can't let those newcomers get away with making ruby look old
now can we!

I use ruby not crystal but I very often use methods that end=20
with a '?' query mark in ruby. It helps me in simple if clauses
such as:

~~~ruby
if hash.has_key?
if hash.key?
if cat.is_hungry?
~~~

(In the latter, it might be a cat of class `Cat` instance, with
an instance variable called `@is_hungry`, and when the cat is=20
fed with food, it is not hungry logically.)

We can generate these `@ivars` through `attr_`* right now as is
already, such as:

~~~ruby
attr_reader :foo
def foo; @foo; end

attr_writer :foo
def foo=3D(i); @foo =3D i; end

attr_accessor :foo
^^^ Combines the above two methods into one.
~~~

But we have no way to designate methods that end via '?'.

I do not know which API call would be nice. apeiros on
IRC suggested  `attr_query`

I am fine with that. (The name is secondary for me, I
would like to have this feature available - what name=20
it would then have is not the main issue for me.)

apeiros then also suggested this syntax:


All `attr_`* that would end with a `?` token, would be a=20
combination of `attr_reader` and also a variant of the
above that has a '?' token, so for example:

~~~ruby
attr_reader :foo?
~~~

Would create both a method `foo()` and `foo?()`.

People who do not need this, can continue to use:

~~~ruby
attr_reader :foo
~~~

just fine.

So perhaps this suggestion is even better than
a new method (such as through `attr_query()`)

(I also have added one more line from apeiros,
not sure if I understood it, but I think the
above explanation should suffice - here is the
other suggestion he did:)

~~~
apeiros> e.g. attr_reader :foo? -> foo? // attr_accessor :foo? -> foo=3D + =
foo? // all with @foo of course. and foo? returning true/false.
~~~

Ok, that's it.

Thanks for reading!




--=20
https://bugs.ruby-lang.org/

In This Thread

Prev Next