Project

General

Profile

Actions

Feature #6561

closed

?= operator

Added by slayer (Vlad Moskovets) over 12 years ago. Updated about 12 years ago.

Status:
Rejected
Assignee:
-
Target version:
[ruby-core:45518]

Description

I have feature proposition to add new opearator ?= its like ||= but assigns only when variable is not defined
So it should be shortcut for

@var ?= 1

eq

defined?(@var) ? @var : @var = 1

It should useful for caching nil'able or false'able items


Related issues 1 (0 open1 closed)

Is duplicate of Ruby master - Feature #6023: Add "a ?= 2" support for meaning "a = a.nil? ? 2 : a"Rejectedmatz (Yukihiro Matsumoto)02/15/2012Actions

Updated by rosenfeld (Rodrigo Rosenfeld Rosas) over 12 years ago

Would this be valid only for instance variables or any variable?

Updated by nobu (Nobuyoshi Nakada) over 12 years ago

rosenfeld (Rodrigo Rosenfeld Rosas) wrote:

Would this be valid only for instance variables or any variable?

Only for instance variables, class variables, and global variables.
"undefined local variable" makes no sense.

Updated by rosenfeld (Rodrigo Rosenfeld Rosas) over 12 years ago

exactly, I was just wanting to make sure. My other proposition for ?= would work for local variables as well, although it would always evaluate the expression if the current value is null while this proposition will only evaluate it once.

For example, suppose a method like this:

def my_method something = nil, something_else = nil
my_var = something || something_else
my_var ?= begin
...
end
end

Yeah, I know we could do "... || something_else || begin", but #6023 would allow false values to prevent the begin-end block execution.

The other approach would be something like:

my_var = begin
...
end if my_var.nil?

Or

if my_var.nil?
my_var = begin
...
end
end

I'm not strictly defending #6023 because I don't remember needing something like this yet (that's why I couldn't think in a concrete example) as what motivated me to ask for such feature was to be able to cache "false" values in my instance variables, so both #6023 and #6561 would work for me.

I'm just stating what are the major differences between them...

Updated by yhara (Yutaka HARA) about 12 years ago

  • Target version changed from 2.0.0 to 2.6

Updated by nobu (Nobuyoshi Nakada) about 12 years ago

  • Status changed from Open to Rejected

I'm not against this feature concept, but '?=' conflicts with existing syntax.
You have to propose different syntax.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0