[#65451] [ruby-trunk - Feature #10333] [PATCH 3/1] optimize: "yoda literal" == string — ko1@...

Issue #10333 has been updated by Koichi Sasada.

9 messages 2014/10/07

[ruby-core:65364] [ruby-trunk - Bug #9593] Keyword arguments default argument assignment behaviour not consistent with optional argument

From: shibata.hiroshi@...
Date: 2014-10-02 06:15:24 UTC
List: ruby-core #65364
Issue #9593 has been updated by Hiroshi SHIBATA.

Related to Bug #10314: Default argument lookup fails in Ruby 2.2 for circular shadowed variable names added

----------------------------------------
Bug #9593: Keyword arguments default argument assignment behaviour not consistent with optional argument
https://bugs.ruby-lang.org/issues/9593#change-49171

* Author: Jack Chen
* Status: Closed
* Priority: Normal
* Assignee: Yukihiro Matsumoto
* Category: syntax
* Target version: current: 2.2.0
* ruby -v: 2.1.1
* Backport: 1.9.3: DONTNEED, 2.0.0: DONTNEED, 2.1: DONTNEED
----------------------------------------
Given the following code:

    def var
      100
    end

    def foo(var: var + 1)
      puts "var: #{var.inspect}"
    end

    def bar(var = var + 1)
      puts "var: #{var.inspect}"
    end

    foo(var: 1)
    foo rescue p $!

    bar(1)
    bar

Ruby 2.0.0:

    var: 1
    var: 101
    var: 1
    var: 101

Ruby 2.1.1:

    var: 1
    #<NoMethodError: undefined method `+' for nil:NilClass>
    var: 1
    var: 101

What appears to be happening is that since 2.1.1, the keyword argument defines `var` as a variable before evaluating the default argument. Personally, I prefer 2.0.0 behaviour, but the way 2.1.1 handles default arguments in non keyword arguments is inconsistent.



-- 
https://bugs.ruby-lang.org/

In This Thread

Prev Next