我在学习红宝石,通过写凯撒密码来练习。这是我目前的代码:

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,可以使其成为包含对象的实例变量,但为什么不直接将stringrotation传递到encrypt方法中呢?

关于ruby - 您可以在方法内部使用外部作用域访问Ruby变量吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23557993/

10-14 04:49