Forum: Ruby-core [ruby-trunk - Feature #7339][Open] Version of super that doesn't raise when super undefined

Posted by prijutme4ty (Ilya Vorontsov) (Guest)
on 2012-11-12 21:31
(Received via mailing list)
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
Posted by Nathan Broadbent (Guest)
on 2012-11-12 21:38
(Received via mailing list)
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
Posted by marcandre (Marc-Andre Lafortune) (Guest)
on 2012-11-12 22:31
(Received via mailing list)
Issue #7339 has been updated by marcandre (Marc-Andre Lafortune).

Status changed from Open to Rejected

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

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

Author: prijutme4ty (Ilya Vorontsov)
Status: Rejected
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
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.