From: nobu@... Date: 2014-06-30T13:37:55+00:00 Subject: [ruby-core:63433] [ruby-trunk - Feature #6806] [Feedback] Support functional programming: forbid instance/class variables for ModuleName::method_name, allow for ModuleName.method_name Issue #6806 has been updated by Nobuyoshi Nakada. Description updated Status changed from Open to Feedback It seems unrelated to "functional programming" at all. ---------------------------------------- Feature #6806: Support functional programming: forbid instance/class variables for ModuleName::method_name, allow for ModuleName.method_name https://bugs.ruby-lang.org/issues/6806#change-47476 * Author: Alexey Muranov * Status: Feedback * Priority: Normal * Assignee: Yukihiro Matsumoto * Category: core * Target version: Next Major ---------------------------------------- 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: ~~~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 ~~~ -- https://bugs.ruby-lang.org/