新手问题 ruby-china 的源代码求解

ane · February 16, 2014 · Last by small_fish__ replied at February 16, 2014 · 2538 hits

开始学习 rails 了,先拿 ruby-china 看看。 setup.rb 中有几段代码不解

puts_section "Checking Package Dependencies..." do
  pkg_exist = true
  [["bundle","Bundler"],["mongod","MongoDB 2.0+"],["redis-server","Redis 2.0+"],["memcached","Memcached 1.4+"],["convert","ImageMagick 6.5+"]].each do |item|
    puts_line_with_yn item[1] do
      if `which #{item[0]}` == ""
        pkg_exist = false
        false
      else
        true
      end
    end
  end

这段代码难道仅仅依靠{if`which #{item[0]} ` == ""}就判断我是否安装了相应的组件吗? 有点没明白怎么回事,which 是个什么意思(目前知道这个是 shell 命令)

第 2 段

%w(config mongoid redis thin).each do |fname|
   `cp config/#{fname}.yml.default config/#{fname}.yml`
 end

这里的%w是什么意思?(已解答)等价于 [ ];

第 3 段

def replace_file(file_name, from, to)
  File.open(file_name, "r+") do |f|
    out = ""
    f.each do |line|
        out << line.gsub(from, to)
    end
    f.pos = 0
    f.print out
    f.truncate(f.pos)
  end
end

这里的f.truncate(f.pos),有什么特别的意义吗?

请查阅 ruby 如何执行 shell 命令。

#2 楼 @ichord%w是什么意思

插队回答下第二段: %w(xxx yyy zzz) 相当于 ["xxx", "yyy", "zzz"]

#6 楼 @allenfantasy 有没有介绍这些%w的连接了?虽然我也猜到它肯定是集合的意思

Google 一下 ruby %w 头条就是 Stackoverflow 的链接。也可以去这里找找:http://www.zenspider.com/Languages/Ruby/QuickRef.html

You need to Sign in before reply, if you don't have an account, please Sign up first.