ruby - 您可以在方法内部访问具有外部作用域的 Ruby 变量吗?

标签 ruby scope

我正在学习 Ruby 并通过编写凯撒密码进行练习。到目前为止,这是我的代码:

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

这是说我无法访问 encrypt 方法中的 rotation 变量。 NameError: main:Object 的未定义局部变量或方法“旋转”

据我所知,rotation 是一个具有外部作用域的局部变量,应该可以在 encrypt 方法内部访问。显然这种推理有问题,那么有人可以解释一下哪里出了问题吗?

最佳答案

这是 Ruby accessing outer variables in nested function 的副本.

您可以通过调用 @rotation 使其成为包含对象的实例变量,但为什么不直接将 stringrotation 传递给加密方法?

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

相关文章:

arrays - 这个数组语法在 Ruby 中意味着什么?

scope - 为什么在 add_subdirectory-ing 定义它的 CMakeLists.txt 后变量值不可用?我怎样才能做到这样呢?

ruby-on-rails - Rspec 模拟 ActiveRecord::Relation 而不是类对象

javascript - 了解范围

javascript - 使变量像窗口一样可访问

c - C 中变量的作用域

python - 如何在 Sphinx 中的方法内自动编写函数

ruby - 如何使用 Ruby 一次向前和向后移动一屏文本?

ruby-on-rails - Ruby on Rails : "Error installing rails: rdoc requires json"

ruby-on-rails - 奇怪的参数数量错误(1 为 0)错误?