【问题标题】:Converting between bases in Ruby在 Ruby 中的碱基之间转换
【发布时间】:2014-07-19 21:40:57
【问题描述】:

我正在尝试使用来自 subreddit 的问题来学习 Ruby。我正在处理a problem,它要求我获取一个包含一系列由空格分隔的十六进制值的字符串,然后将它们转换为二进制并根据二进制值进行一些工作。我看起来应该是一个可行的解决方案,但是当我运行它时出现错误。代码如下:

print "enter: "

vals = gets.chomp.split

for i in 0...vals.length do
   vals[i].hex.to_s(2)!
end

vals.each {|x| puts x}

我收到以下错误消息:

test.rb:6: syntax error, unexpected '!', expecting keyword_end
test.rb:9: syntax error, unexpected end-of-input, expecting keyword_end

据我了解,.hex 方法应该返回一个十六进制字符串的十进制值,并且 to_s(2)!应该将该整数转换为二进制字符串。不过很明显,我没有得到任何东西。

【问题讨论】:

  • to_s 之后的 bang 无效。并且没有.to_s! 方法
  • 谁让你在这里使用! vals[i].hex.to_s(2)! ?你在关注哪个文档?
  • @ArupRakshit - 没有人告诉我;它主要是反复试验的产物。现在我明白为什么错了。

标签: ruby


【解决方案1】:

to_s 之后的 bang 不是 ruby​​ 上的有效语法。你可以有一个以! 结尾的方法,例如chomp!。并且没有.to_s! 方法。

你要找的可以通过以下代码实现:

print "enter: "

vals = gets.chomp.split

for i in 0...vals.length do
     vals[i] = vals[i].hex.to_s(2)
end

vals.each {|x| puts x}

【讨论】:

  • Ben,fotanus 无疑认为最好给您一个尽可能接近您编写的代码的答案,但您应该知道,替换您的 @987654326 会更像 Ruby @块与vals.map! { |v| v.hex.to_s(2) }。一个细节:你不需要chompgets.split 就足够了。
猜你喜欢
  • 2014-05-24
  • 2021-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-24
  • 2010-11-17
  • 2015-04-09
相关资源
最近更新 更多