Learn Ruby

Saturday, April 14, 2007

 

Array.new

if use Array.new(size, TargetClass.new(...))
Then all the element of this array POINT to the same object
Then modified one entry will result the modification to others
My solution is

a = Array.new(size)
for i in 0...size
a[i].new(...)
end


can it be improved?

Labels:


Thursday, July 06, 2006

 

quick and dirty codes for my bio info program

class Gene
def initialize(seq, info)
@seq = seq
@info = info
@ei_marks = [0] + srch_ei_recursively(0)
end

def ex_N
@ei_marks.size/2 + 1
end

def in_N
@ei_makrs.size/2
end

def exon(index)
if (index*2) < @ei_marks.size - 1
@seq[@ei_marks[index*2]...@ei_marks[index*2 + 1]]
else
@seq[@ei_marks[index*2]...@seq.size]
end
end

def intron(index)
@seq[(@ei_marks[index*2 + 1])...(@ei_marks[index*2 + 2])]
end
def test
@ei_marks
end
private
def srch_ei_recursively(beg)
beg_value = @seq[beg].to_i
inter_value = 96.5 # the value of 'Z' is 96
for i in beg...@seq.size
if (((beg_value - inter_value)*(@seq[i].to_i - inter_value)) < 0)
return [i] + srch_ei_recursively(i)
end
end
return []
end
# end of private methods

end

Wednesday, July 05, 2006

 

String#delete

这个method接受的参数多于一个时,只要有一个参数不存在于目标string里,任何动作就都不会执行。看例子比较容易明白。
irb(main):001:0> a = "he l lo  !"
=> "he l lo !"
irb(main):002:0> a.delete!(" ", "a")
=> nil
irb(main):003:0> a
=> "he l lo !"
irb(main):004:0> a.delete!(" ")
=> "hello!"
irb(main):005:0>

所以执行String#delete要么逐个删除,要么用String#include?检查一下。

另外'\n'与"\n"的区别在这里也有体现:
irb(main):001:0> "he ll o\n".delete('\n')
=> "he ll o\n"
irb(main):002:0> "he ll o\n".delete("\n")
=> "he ll o"
irb(main):003:0> printf('\n')
\n=> nil
irb(main):004:0> printf("\n")

=> nil
irb(main):005:0>

 

Integer#chr

若是使用getc, readchar读取IO的字符,结果会是一个0~255的整数。若想将其转换成字符,可以用chr method.比如
irb(main):001:0> 98.chr
=> "b"
reference

Tuesday, July 04, 2006

 

如何控制output的格式

最简单的是用 printf,格式使用起来跟C的语法一样
如下面的语句
testfile = File.new("testfile", "w")
a = 5
for i in 1..10 do
testfile.printf("%0#{a}d \n", i)
end

那么得到的结果就是
$cat testfile
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010

注意设置宽度是用#{a}把变量a的值传递到字符串内

Archives

July 2006   April 2007  

This page is powered by Blogger. Isn't yours?

Subscribe to Posts [Atom]