首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >初学者试图找出为什么两个非常相似的代码集有非常不同的结果

初学者试图找出为什么两个非常相似的代码集有非常不同的结果
EN

Stack Overflow用户
提问于 2017-05-13 21:32:11
回答 2查看 51关注 0票数 1

第一组代码工作。

https://repl.it/Br7w/1069

代码语言:javascript
复制
def scramble_string(string, positions)
  scrambled=""
  idx=0
  while idx<string.length
    scrambled+=string[positions[idx]]
    idx+=1
  end
  puts scrambled
  return scrambled
end

它产生了下列投入/产出:

scramble_string("abcd",3,1,2,0) == "dbca“ Scramble_string(“马尔可夫”,5,3,1,4,2,0) == "vkaorm“

另一方面,这第二套不起作用

https://repl.it/Br7w/1072

代码语言:javascript
复制
def scramble_string(string, positions)
  scrambled=string
  idx=0
  while idx<string.length
    scrambled[idx]=string[positions[idx]]
    idx+=1
  end
  puts scrambled
  return scrambled
end

它产生了下列投入/产出:

scramble_string("abcd",3,1,2,0) == "dbcd“ scramble_string("markov",5,3,1,4,2,0) == "vkkokv“

请帮我理解为什么第二盘不能用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-13 21:42:13

在ruby中,字符串是通过引用分配的。那就是,之后

代码语言:javascript
复制
scrambled=string

scrambled的任何更改也将更改string

如果你用

代码语言:javascript
复制
scrambled=string.dup

它为scrambled提供了自己的副本,然后函数将提供相同的输出。

票数 1
EN

Stack Overflow用户

发布于 2017-05-13 21:39:23

因为在第二个scrambled_string方法中,当字符串作为第一个参数传递时,您将初始化scrambled变量,而不是作为空字符串。

代码语言:javascript
复制
def scramble_string(string, positions)
  scrambled = ''
  idx = 0
  while idx < string.length
    scrambled[idx] = string[positions[idx]]
    idx += 1
  end
  scrambled
end

p scramble_string('abcd', [3, 1, 2, 0])
# => "dbca"
p scramble_string('markov', [5, 3, 1, 4, 2, 0])
# => "vkaorm"

这两种情况都是这样的:

代码语言:javascript
复制
markov           markov
v                v
markov           varkov
k                k
markov           vkrkov
a                k
markov           vkkkov
o                o
markov           vkkoov
r                k
markov           vkkokv
m                v
"vkaorm"         "vkkokv"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43958184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档