[#77789] [Ruby trunk Feature#12012] Add Boolean method — prodis@...
Issue #12012 has been updated by Fernando Hamasaki de Amorim.
4 messages
2016/10/27
[ruby-core:77735] [Ruby trunk Bug#12861] super in a block can be either lexically or dynamically scoped depending on how the block is invoked
From:
shyouhei@...
Date:
2016-10-24 03:59:14 UTC
List:
ruby-core #77735
Issue #12861 has been updated by Shyouhei Urabe.
bug hit wrote:
> I think it would be better if super were always lexically scoped
Agreed but... What should then happen for inter-class block passing situation, like this?
```ruby
class Foo
def self.foo
'foo@foo'
end
end
class Bar < Foo
def self.bar(&block)
define_singleton_method :foo, &block
end
end
class Baz
def self.foo
Bar.bar do
super
end
end
end
Baz.foo
```
----------------------------------------
Bug #12861: super in a block can be either lexically or dynamically scoped depending on how the block is invoked
https://bugs.ruby-lang.org/issues/12861#change-61037
* Author: bug hit
* Status: Open
* Priority: Normal
* Assignee:
* ruby -v: ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]
* Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN
----------------------------------------
```ruby
class Class1
def self.foo
'foo'
end
def self.method1
'method1'
end
end
class Class2 < Class1
def self.foo
bar do
super()
end
end
def self.bar(&block)
a = block.()
define_singleton_method :method1, &block
b = send(:method1)
c = block.()
[a, b, c]
end
end
p Class2.foo # ["foo", "method1", "foo"]
```
It doesn't seem like a good idea for a given language construct to be either lexically or dynamically scoped, depending on how its surrounding block is invoked (which is not visible at the point of definition). I think it would be better if super were always lexically scoped, and a different keyword (dynamic_super) were always dynamically scoped
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:[email protected]?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>