Project

General

Profile

Actions

Feature #7339

closed

Version of super that doesn't raise when super undefined

Added by prijutme4ty (Ilya Vorontsov) over 11 years ago. Updated over 11 years ago.

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

Description

=begin
I propose new method try_super (it's possibly bad name, any suggestions) which would work like a super except not raising in case that super method undefined. It can be useful in such a situation - when module makes smth useful even in absence of super class.
I use an example with Module#prepend, but similar example with Module#include can be created with a bit more effort.

module MyLogging
def info(*args)
$stderr.puts "Hello! You've an info message"
super # with super it raises when super undefined
end
end

require 'logger'
class Logger
prepend MyLogging
end

class Foo
prepend MyLogging
end

Logger.new.info 'message'
Foo.new.info 'message'

In an example Foo.new.info raises an exception while really it shouldn't in my opinion. So try_super can be used

If it doesn't broke many libraries (I believe not many of them uses super in cases when it raises), super can be renamed to 'super!' and more mild version can be 'super'.

=end

Updated by nathan.f77 (Nathan Broadbent) over 11 years ago

We can already write:

 super if defined?(super)

I don't think a shortcut would be necessary for that, since it's already
quite short.

Best,
Nathan

On Tuesday, 13 November 2012, prijutme4ty (Ilya Vorontsov) wrote:

Issue #7339 has been reported by prijutme4ty (Ilya Vorontsov).


Feature #7339: Version of super that doesn't raise when super undefined
https://bugs.ruby-lang.org/issues/7339

Author: prijutme4ty (Ilya Vorontsov)
Status: Open
Priority: Normal
Assignee:
Category:
Target version:

=begin
I propose new method try_super (it's possibly bad name, any suggestions)
which would work like a super except not raising in case that super method
undefined. It can be useful in such a situation - when module makes smth
useful even in absence of super class.
I use an example with Module#prepend, but similar example with
Module#include can be created with a bit more effort.

module MyLogging
def info(*args)
$stderr.puts "Hello! You've an info message"
super # with super it raises when super undefined
end
end

require 'logger'
class Logger
prepend MyLogging
end

class Foo
prepend MyLogging
end

Logger.new.info 'message'
Foo.new.info 'message'

In an example Foo.new.info raises an exception while really it shouldn't
in my opinion. So try_super can be used

If it doesn't broke many libraries (I believe not many of them uses super
in cases when it raises), super can be renamed to 'super!' and more mild
version can be 'super'.

=end

--
http://bugs.ruby-lang.org/

Updated by marcandre (Marc-Andre Lafortune) over 11 years ago

  • Status changed from Open to Rejected

Indeed, defined?(super) is probably what you were looking for.

Actions

Also available in: Atom PDF

Like0
Like0Like0