0

我正在按照本教程学习如何在画布上创建形状和颜色。这是我遇到的问题:当我尝试在 run_command 方法中运行命令并使用命令的第一个字母 (command[0]) 时,它会将数字 98 返回给我。我正在尝试将命令的第一个字母与字母表中的一个字母相匹配,但我无法这样做。奇怪的是,当我用“command.delete “b””删除第一个字母时,该字母被删除,我可以随意使用字符串的其余部分。

这是我的代码:

require 'ruby-processing'
class ProcessArtist < Processing::App

  def setup
    background(0, 0, 0)
  end

  def draw
    # Do Stuff
  end

  def key_pressed
    if @queue.nil?
      @queue = ""
    end
    if key != "\n"
      @queue = @queue + key
    else
      warn "Time to run the command: #{@queue}"
      run_command(@queue)
      @queue = ""
    end
  end

  def run_command(command)
    puts "Running command: #{command}"
    puts command[0]
    if command[0] == "b"
      command.delete "b"
      command.split(",")
      background(command[0].to_i,command[1].to_i,command[2].to_i)
    else
      puts command[0]
      command.delete "b"
      command.split(",")
      background(command[0].to_i,command[1].to_i,command[2].to_i)
    end
  end
end

ProcessArtist.new(:width => 800, :height => 800,
                  :title => "ProcessArtist", :full_screen => false)
4

2 回答 2

1

看来您使用的 ruby​​ 版本早于1.9

在旧版本的 ruby​​ (1.8-) 中,String#\[\]返回Fixnum表示 ASCII 值的对象,而不是String对象。

>> RUBY_VERSION
=> "1.8.7"
>> 'bcd'[0]
=> 98

要取回字符串,请使用以下方法之一:

>> 'bcd'[0,1]
=> "b"
>> 'bcd'[0..0]
=> "b"
>> 'bcd'[0].chr # this will not work in Ruby 1.9+, so not recommended.
=> "b"

为了比较:

>> 'bcd'[0] == 'b'
=> false
>> 'bcd'[0] == ?b
=> true
>> 'bcd'.start_with? 'b'
=> true
于 2013-11-07T07:08:08.513 回答
1

啊,我明白我做错了什么。它应该是:

def run_command(command)
    puts "Running command: #{command}"
    puts command[0]
    if command[0] = "b"
      command.delete "b"
      command.split(",")
      background(command[0].to_i,command[1].to_i,command[2].to_i)
    else
      puts command[0]
      command.delete "b"
      command.split(",")
      background(command[0].to_i,command[1].to_i,command[2].to_i)
    end
  end
于 2013-11-07T07:08:11.577 回答