感谢您抽出宝贵时间进行审核,并就我的简单问题提出建议.我正在为我正在工作的练习寻求解决方案.
我想知道如何编写这个数组的内容:
@points = [1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
到这个字符串:
saved_points1 = "SAVED_POINTS2 = [%s]" % [@points]
Run Code Online (Sandbox Code Playgroud)
这样当打印saved_points1时,它会打印:
"SAVED_POINTS2 = [1, 2, 3, 4]"
Run Code Online (Sandbox Code Playgroud)
现在,我在打印时看到了这个:
"SAVED_POINTS2 = [1234]"
Run Code Online (Sandbox Code Playgroud)
我有一种感觉,也许这可能是一个红宝石版本的问题.我在1.8.7.也许如果我在1.9.x上阵列将按预期打印?或者是否有不同/更好的方法来保存,读取,然后打印此操作?
如果它有所不同,SAVED_POINTS2存在于实例化时我需要的模块中.我正在使用该模块中的变量来加载/保存我的新类的值(@points存在于其中).我敢打赌,这不是保存状态的正确方法,但这是我知道如何在我目前的红宝石理解水平上做到这一点的唯一方法.所以,我不一定在寻找更好的保存状态方法的建议,因为我想确保我先了解如何从这些数组中正确读/写.但如果你得到了我认为我明白的建议,我很乐意听到.
def room_actions
case $next_move
when "instructions"
instructions
when $next_move.any? { |x| ['up', 'down', 'left', 'right'].include?(x) }
determine_start
else
puts "I don't understand that."
prompt; $next_move = gets.chomp()
room_actions
end
end
Run Code Online (Sandbox Code Playgroud)
原谅我不理解这里发生了什么,但为什么ruby会抛出这个错误?
foo.rb:83:在
room_actions': undefined method任何?for"":String(NoMethodError)
$next_move 是一个全局变量(我知道它们很糟糕,我正在重构),我从状态机中获取chomp来提供这个方法.
似乎我没有定义'任何?' 方法.或者我传递的字符串是空的?无论如何,不是'.any?' 一个内置的ruby方法?我正在使用2.0.0.
谢谢你看一看并提出建议.
我很高兴知道为什么"Cat"下面的实例也没有将"This animal can:"文本放在其特定的实例属性之前.我期待这样的输出:
This animal can:
Say it's name: 'Rover'
Bark
This animal can:
Say its name: 'Satan'
Meow
Run Code Online (Sandbox Code Playgroud)
这是代码:
class Animal
puts "This animal can:"
end
class Dog < Animal
def initialize(name)
@name = name
puts "Say its @name: '%s'" % [name]
end
def bark
puts "Bark"
end
end
class Cat < Animal
def initialize(name)
@name = name
puts "Say its @name: '%s'" % [name]
end
def meow
puts "Meow"
end
end
rover = Dog.new("Rover").bark …Run Code Online (Sandbox Code Playgroud)