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]