在ruby中require可以加载gem安装的ruby程序,require的查找应该是在$LOAD_PATH 这个数组里面的。从这里面可以看到一个 lib\ruby\2.1.0\ 字样的路径,这就是一般ruby库放置的路径,我自己的库也放在这里,为了方便,先建立一个文件夹取名为 _chj,即我自己的文件放置在 lib\ruby\2.1.0\_chj中。然后就可以在这里放置自己的ruby文件了。
比如我的一个ruby文件取名为 chj.rb 那么引用的时候就这样require "_chj/chj"
下面给出我自己的一个例子,chj.rb
module CHJmethod
#- 文件保存与读取
def save(obj,fname,type="w")
File.open(fname,type,:encoding=>"utf-8") {|f| f.write obj}
end
def read(fname)
File.open(fname,"r",:encoding=>"utf-8") {|f| f.read}
end
#- markdown 解析
def md_to_html(fname)
require 'kramdown'
save(Kramdown::Document.new(read(fname+".md")).to_html,fname+".html")
end
# alias dst src
alias :md_to_txt :md_to_html
#- 动态代码修改,非常便于调试,可在此基础上扩展
def hotdebug(rb_file,_bind)
# rb_file 文件中是你的程序
# _bind 是绑定的上下文 binding caller[0]的
if ! File.exist?(rb_file)
STDERR.puts "CHJERROR: no such file #{rb_file}"
return false
end
_CHJ_LINE_="begin"
begin
_CHJ_LINE_.strip!
if _CHJ_LINE_== "q"
break # exit
else
# trap ( :INT) { puts 'interrupt ' } # 这样防止了 ctrl+c中断
begin
#load(rb_file,false)
eval(read(rb_file),_bind)
rescue Exception => e
puts "CHJINFO: Exception #{e}"
end
STDIN.flush
end
puts "CHJINFO: run end #{rb_file} "
end while _CHJ_LINE_=gets
end
#- erb 模板替换
def hd_erb(string,func_binding)
require "erb"
ERB.new(string).result(func_binding)
end
end # module
由于我写在了module
中使用的时候如下:
require "_chj/chj"
include CHJmethod
#CHJmethod::hotdebug("aa.txt")
str= CHJmethod::read("aa.txt")
def my_binding
title="CHJ"
chj="hong mao da xia"
binding
end
puts hd_erb(str,my_binding)
动态调试代码
上述程序中hotdebug
是我最得意的想出来的函数。就是可以直接修改代码不用重新启动程序,在调试时非常方便。
下面是一个简单的python版本的,比如调试tensorflow就非常方便。
#-*- coding:utf-8 -*-
'''
使用说明
这里引用一些必要的库,及基本配置
然后代码可以在文件code.py中动态修改,如果想结束输入 ‘q’即可
'''
while True:
try:
execfile('code.py')
except Exception,ex:
print Exception,":",ex
#traceback.print_exc()
flag = raw_input("--- CHJ run end \n")
if flag=="q":
break
#code=open('code.py',"r").read()
#和ruby 不一样,不能这样
改进一版的(便于自己实际应用的)
#! ..../anaconda2/envs/tensorflow/bin/python
#-*- coding:utf-8 -*-
import sys
if len(sys.argv)<2:
print 'CHJ_INFO: parameters error',sys.argv
exit(-1);
print 'CHJ_HOT_DEBUG: ',sys.argv
index=1
if len(sys.argv)==3:
index+=1
execfile(sys.argv[1])
while True:
try:
execfile(sys.argv[index])
except Exception,ex:
print Exception,":",ex
#traceback.print_exc()
flag = raw_input("--- CHJ run end --- \n")
if flag=="q":
break