我在学习红宝石,通过写凯撒密码来练习。这是我目前的代码:
print "Enter rotation: "
rotation = gets.chomp
print "Enter string to encrypt: "
string = gets.chomp
def encrypt
keys = (' '..'z').to_a
values = (' '..'z').to_a.rotate(rotation)
hash = Hash[keys.zip(values)]
chars = string.split('')
encrypted_chars = chars.collect { |char| hash[char] }
encryptd_string = encrypted_chars.join
end
puts "Encrypted string: " + encrypt
这意味着我无法访问
rotation
方法中的encrypt
变量。NameError: undefined local variable or method 'rotation' for main:Object
据我所知,
rotation
是一个具有外部作用域的局部变量,应该可以在encrypt
方法内部访问。很明显这个推理有问题,那么有人能解释一下是什么问题吗? 最佳答案
这是Ruby accessing outer variables in nested function的副本。
通过调用包含对象的@rotation
,可以使其成为包含对象的实例变量,但为什么不直接将string
和rotation
传递到encrypt
方法中呢?
关于ruby - 您可以在方法内部使用外部作用域访问Ruby变量吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23557993/