【问题标题】:Array of individual elements to return a string sentence返回字符串语句的单个元素数组
【发布时间】:2015-04-26 17:30:21
【问题描述】:

我正在创建一个程序来解密秘密消息'i want a coke!'。到目前为止,这是我的代码示例:

class Decoder
  def initialize(coded_message)
    @input = coded_message.downcase.split('')
    @symbols = %w(@ # $ % ^ & *)
    @alph = ('a'..'z').to_a.join
  end
  def decoded_symbol
    @input.map! do |symbols|
      if @symbols.include?(symbols)
       symbols = " "
    else
       symbols = symbols
     end
   end
 end
 def decoded_cipher
  @input.map! do |char|
      if @alph.include?(char)
          char = @alph[@alph.index(char) - 4]
      end
      char = char
    end
 end
 def run
     decoded_cipher
     decoded_symbol
 end
end

Decoder.new("m^aerx%e&gsoi!").run

但是,这是终端返回的内容:

=> ["i", " ", "w", "a", "n", "t", " ", "a", " ", "c", "o", "k", "e", "!"]

我试图让它作为一个句子返回。我一直在玩run 方法,看看我是否可以更改@input 输出,但无法正常工作。任何建议将不胜感激。

【问题讨论】:

  • Decoder.new("m^aerx%e&gsoi!").run.join 应该可以工作
  • p "m^aerx%e&gsoi!".tr("a-z@#$%^&*", "w-za-v ")
  • @PramodShinde 也可以。不过我确实想把它放在课堂上。感谢您的回复。

标签: ruby arrays string


【解决方案1】:

方法decoded_symbol没有明确的return语句,所以使用数组@input作为返回值。

在方法的末尾添加一行,以便返回连接的字符串:

  def decoded_symbol
    @input.map! do |symbols|
      if @symbols.include?(symbols)
       symbols = " "
    else
       symbols = symbols
     end
   end
   @input.join   # Here
 end

【讨论】:

  • 请问为什么要放在decoded_symbol方法里?为什么不用decoded_cipherrun 方法?顺便说一句,谢谢你,因为这正是我想要的。
  • @TravisSiebenhaar 在run 的末尾添加这一行也可以,但不是decoded_cipher。在 Ruby 中,每个方法都有一个返回值,如果没有使用显式的 return 语句,则使用最后一个表达式作为返回值。所以在你的原始代码中,run 的返回值就是decoded_symbol 的返回值。 decoded_symbol的返回值为数组@input
  • 太棒了。完美的解释。非常感谢您花时间解释它。
猜你喜欢
  • 1970-01-01
  • 2012-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-28
  • 2020-01-15
  • 1970-01-01
  • 2015-11-22
相关资源
最近更新 更多