JaT*_*aTo 1 ruby local-variables
嗨,我想知道是否有人可以向我解释为什么用以下代码编写的地图函数是按照其编写的方式编写的.具体来说,我们需要做什么
results = letters.map do |letter| encrypted_letter = encrypt_letter(letter)
Run Code Online (Sandbox Code Playgroud)
而不只是做
results = letters.map do |letter| encrypt_letter(letter)
Run Code Online (Sandbox Code Playgroud)
class Encryptor
def cipher
{"a" => "n", "b" => "o", 'c' => 'p', 'd' => 'q',
'e' => 'r', 'f' => 's', 'g' => 't', 'h' => 'u',
'i' => 'v', 'j' => 'w', 'k' => 'x', 'l' => 'y',
'm' => 'z', 'n' => 'a', 'o' => 'b', 'p' => 'c',
'q' => 'd', 'r' => 'e', 's' => 'f', 't' => 'g',
'u' => 'h', 'v' => 'i', 'w' => 'j', 'x' => 'k',
'y' => 'l', 'z' => 'm'}
end
def encrypt_letter(letter)
lowercase_letter = letter.downcase
cipher[lowercase_letter]
end
def encrypt(string)
letters = string.split("")
results = letters.map do |letter|
encrypted_letter = encrypt_letter(letter)
end
results.join
end
def decrypt_letter(letter)
lowercase_letter = letter.downcase
cipher.key(lowercase_letter)
end
def decrypt(string)
letters = string.split("")
results = letters.map do |letter|
decrypted_letter = decrypt_letter(letter)
end
results.join
end
end
Run Code Online (Sandbox Code Playgroud)
没理由; 变量立即被丢弃.
我认为它的误导性和无意识性在它之上.
大多数代码看起来有点冗长,例如:
def encrypt(string)
letters = string.split("")
results = letters.map do |letter|
encrypted_letter = encrypt_letter(letter)
end
results.join
end
Run Code Online (Sandbox Code Playgroud)
IMO这将更像Ruby-esque更接近:
def encrypt(str)
str.chars.collect { |c| encrypt(c) }.join
end
Run Code Online (Sandbox Code Playgroud)
它可能比那更严格,或以其他方式编写,尽管其中一些是偏好问题.例如,each_with_object可以与铲运营商一起使用,但这不太"功能".
(我喜欢collect在map收集资料时,偏好,我觉得更多的沟通,如果更长的时间.)
在更多行上传播功能不会使事物可读,但它取决于上下文.对Ruby或方法链接不熟悉的人可能会被(IMO更规范的)单行混淆.