2012-10-23 64 views
4

我没有得到答案的下面的练习从哈特尔的Rails的教程:Railstutorial(迈克尔·哈特尔):练习4.6

通过4.10与适当的 方法取代问号,结合分裂,洗牌,并加入写一个函数, 洗牌给定的字符串中的字母。

4.10:

>> def string_shuffle(s) 
>> s.split('').?.? 
>> end 
=> nil 
>> string_shuffle("foobar") 

有人可以帮我吗?

非常感谢!

+0

使用这种方法,你不能准确地洗牌给定的字符串。事实上,你正在返回一个NEW字符串,原始字符串的字母被混洗。 – rewritten

回答

6

我认为只是增加洗牌,并加入像你说的应该工作:

def string_shuffle(s) 
    s.split('').shuffle.join('') 
end 

的方法,由左到右工作。分割('')将单词分割成单独的字母数组。洗牌然后随机化他们。并加入('')反转分割,并将其重新放回到一个单词中。 ('')是两个单引号,不是一个双引号。如果你分割(“”)和连接(“”),它也应该工作,因为你只是想分割和连接每个字符。

+0

好的。并与真正的价值观合作?在哪里放置“放置”或类似的东西?在哪里申报价值? – christophe

+1

ruby​​中的方法将返回最后一行,所以字符串将被返回。你可以只说“puts string_shuffle(s)”,你会打印混洗的字符串。然而,正如在评论中重写的那样,你实际上正在返回一个新字符串,其中原始字符串的字母被混洗。对于大多数情况下,这将基本上做你想要的。唯一的情况是,如果您定义了一个变量并对其进行混洗,那么该变量仍将保持其原始值。在这种情况下,您需要执行以下操作: s =“word” s = string_shuffle(s) – kindofgreat

+2

@christophe一旦您有如上定义的'string_shuffle'方法,就可以将其称为'string_shuffle(“foobar “)'。每次你打电话时它会给出不同的输出。 Rails教程祝你好运。稍后请查阅http://rubykoans.com/(在同一部分末尾推荐),以加强您的ruby技能。 –

相关问题