ruby中require自己文件/动态调试代码

在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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值