Ruby 重新调整从不运行的if块中的数组将使其为零

Ruby 重新调整从不运行的if块中的数组将使其为零,ruby,Ruby,我有一个函数,如果变量不是数组, 使其成为一个数组,原始变量的值作为第一个和第二个变量 唯一元素 我写的代码如下 variable = userInputOfSorts() puts JSON.pretty_generate(variable) # Prints expected output, array with 2 values if (!variable.is_a?(Array) variable = [variable] end puts variable # nil 现在,

我有一个函数,如果变量不是数组, 使其成为一个数组,原始变量的值作为第一个和第二个变量 唯一元素 我写的代码如下

variable = userInputOfSorts()
puts JSON.pretty_generate(variable) # Prints expected output, array with 2 values
if (!variable.is_a?(Array)
    variable = [variable]
end
puts variable # nil
现在,我已经将调试语句放在这个if块(puts语句)中,并且可以确认它没有运行

使用if块中的debug语句(我确信它没有运行),我尝试注释掉重新分配语句


将输入转换为数组(如果尚未转换为数组)的较短实现:

def input_to_array(input)
  [*input]
end
使用原始代码:

variable = userInputOfSorts()
puts JSON.pretty_generate(variable) # Prints expected output, array with 2 values
variable = [*variable]
puts variable # nil
我提交了一份申请,得到了一位开发者的答复。显然,在ruby中,注释掉计算为false的if块中的代码应该能够影响您的程序。这不是一个bug,它是一个“特性”

但是,

我找到了解决办法

所以,最初的问题是

require 'JSON'


class MainClass
  attr_reader :mock_input

  def initialize(input)
    puts "hello"

    @mock_input = input

    # Print with JSON or puts
    puts "-------"
    if (mock_input.is_a?(Array))
      puts JSON.pretty_generate mock_input
    else
      puts mock_input
    end
    puts "-------"

    if (!mock_input.is_a?(Array))
      puts "Converting to array..."
      mock_input = [mock_input]
    end

    # Print with JSON or puts
    puts "-------"
    if (mock_input.is_a?(Array))
      puts JSON.pretty_generate mock_input
    else
      puts mock_input
    end
    puts "-------"
  end
end

MainClass.new ["hello", "world"]
换线

mock_input = [mock_input]

修复它


注:正如@Wayne Conrad指出的,我本可以使用
数组(模拟输入)
而不是if语句。

提供。当然,对不起。完成!如果(!variable.is_a?(Array)缺少一个结束参数,顺便说一下:
a=Array(a)
将把
a
转换为一个数组,除非它已经是一个数组,在这种情况下它保持不变。这似乎不是将输入转换为数组的替代方法。我想要的是,它的输入是,比如说“某个字符串”[“some string”]将其添加到您的原始示例中。这将产生相同的错误和“variable”,最终为零。不过,谢谢。
require 'JSON'


class MainClass
  attr_reader :mock_input

  def initialize(input)
    puts "hello"

    @mock_input = input

    # Print with JSON or puts
    puts "-------"
    if (mock_input.is_a?(Array))
      puts JSON.pretty_generate mock_input
    else
      puts mock_input
    end
    puts "-------"

    if (!mock_input.is_a?(Array))
      puts "Converting to array..."
      mock_input = [mock_input]
    end

    # Print with JSON or puts
    puts "-------"
    if (mock_input.is_a?(Array))
      puts JSON.pretty_generate mock_input
    else
      puts mock_input
    end
    puts "-------"
  end
end

MainClass.new ["hello", "world"]
mock_input = [mock_input]
@mock_input = [@mock_input]