好的,所以我有一个函数,如果一个变量最终不是一个数组, 使它成为一个数组,原始变量的值为第一个和 唯一的元素 iv编写如下代码
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 if(puts语句)中,并且可以确认它没有运行。
使用if块中的调试语句,我确定没有运行,我试图注释掉重新分配语句
# variable = [variable])
无所谓,无论如何都不会发表这种说法。但是按照上帝,它有效。显然,当用户输入不是数组时,我需要那个语句。
所以我的问题是,从未运行的重新分配语句使变量为null。
我写了一个例子,一个可以运行以证实这一点。它似乎与classes / attr_reader有关,因为它只是在类外编写并运行它时才有效。
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"]
答案 0 :(得分:0)
如果输入不是一个数组,那么将输入转换为数组会稍微短一些:
\n
使用原始代码:
def input_to_array(input)
[*input]
end
答案 1 :(得分:0)
我提交了bug report,并得到了其中一位开发人员的答复。显然,在ruby中,如果被评估为false的块应该能够影响您的程序,则注释掉代码。 AKA,这不是一个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]
到
@mock_input = [@mock_input]
修复它
PS:正如@Wayne Conrad指出的那样,我本可以完全使用Array(mock_input)
而不是if语句。