Project

General

Profile

Actions

Feature #6806

open

Support functional programming: forbid instance/class variables for ModuleName::method_name, allow for ModuleName.method_name

Added by alexeymuranov (Alexey Muranov) almost 9 years ago. Updated 8 months ago.

Status:
Feedback
Priority:
Normal
Target version:
-
[ruby-core:46829]

Description

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 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 and ModuleName.method_name behave identically, so i propose that they be different:

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:

M.f(2) # => 4
M.g(2) # => 4
M::f(3) # => 9
M::g(3) # => 4
Actions

Also available in: Atom PDF