Project

General

Profile

Feature #6806

Updated by nobu (Nobuyoshi Nakada) over 4 years ago

=begin
What would you say about this proposal? Is there a better alternative?

I suggest to support functional programming in Ruby by making module methods called with `ModuleName::method_name` (({ModuleName::method_name})) syntax raise an exception if the method uses instance or class variables (instance variables of the singleton class, of course).
If i understand correctly, currently `ModuleName::method_name` (({ModuleName::method_name})) and `ModuleName.method_name` (({ModuleName.method_name})) behave identically, so i propose that they be different:

~~~ruby


module M

module_function

def f(x)

x*x

end

def g(x)

@x ||= x

@x*@x

end

end



M.f(2) # => 4

M.g(2) # => 4

M::f(3) # => 9

M::g(3) # => Error: instance variable `@x` used in a functional call `M::g`
~~~


Current behavior:

~~~ruby


M.f(2) # => 4

M.g(2) # => 4

M::f(3) # => 9

M::g(3) # => 4
~~~ =end

Back