ruby中數字與數字字串相加的原理

2021-08-31 16:51:32 字數 2069 閱讀 7035

** [url]

[b]數字轉化為字元:[/b]

i = 100

text = string(i)

.在ruby的世界中,很多東西不怕你做不到,就怕你想不到。正所謂,思想有多遠,你就可以走多遠。思想不一定非得是自己的,借鑑他人的也很好(不過,做人要厚道,如果是別人的idea,要把思想**說明白、講清楚)。ruby世界是個開放的世界,能在這樣的世界裡生活,那是件很爽的事情。扯了一下淡。。。。

言歸正傳。。。

剛看ruby時,看到 1+「23」這樣的表示式,覺得很n(orth)b,數字跟字元居然可以這樣運算。時間越久,就越想知道為什麼可以這樣做,具體的過程是什麼樣的,在rubinius之前,這個探索是痛苦的。因為ruby是用c語言實現的,而那個c語言的**我看著實在是不習慣。比如下面的**,直到現在也木有弄明白。哪位知道的可以給我指導一下。

static inline void

rb_ary_modify_check(ary)

value ary;

自從有了rubinius,又多了一條探索ruby世界奧秘的路,重要的是,這是條我比較習慣的路。好吧,還是回到1+「23」這個問題上來。

rubinius的實現中,主要用到了3個方法: :+, :redo_coerce,:math_coerce

具體如下:

def +(o)

ruby.primitive :fixnum_add

redo_coerce :+,o

enddef redo_coerce(math,right)

b,a = math_coerce(right)

a.__send__ meth,b

enddef math_coerce(other,error = :coerce_error)

begin

values = other.coerce(self)#[other,self]

rescue

send error,other

endunless values.__kind_of__(array)&&values.length==2 do

raise typeerror,"coerce must return [x,y]"

endvalues[1],values[0]

end

整個實現就差不多了,但是沒完!!!注意到math_coerce這個方法的引數之一是other,而other又呼叫了coerce這個方法。。。。。從中看出點什麼東西來沒????我猜你想到了,要使1+「23」能工作,也就是說能得到24,那麼應該為string類實現coerce(貌似強制的意思)這個方法。

class string

def coerce(n)

if self['.']

values = [n, float(self)]

print "self is ",self,"\n"

[n, float(self)]

else

[n, integer(self)]

endend

end

這樣就大功告成了。理解了這個,也就可以為其他很多的類實現運算,進而可以得到你想要的結果了。north b

以上看的有點暈,下面是我實現的乙個操作:基本符合我的要求

class string

def coerce(n)

if self["."]

values = [n, float(self)]

else

values = [n, integer(self)]

endend

endi = "12.6"

j = "77"

k = 23

m = 0

m += k

puts m

m += j

puts m

m += i

puts m

字串與數字相加

如果乙個是字串或者兩個都是字串,使用 會進行拼接,而不是相加 而如果使用 則會進行強制轉化後做減法運算 var result 12 2 12 2 2 1408 減法強制轉化 document.write result var result1 12 2 12 1412 加法拼接 document.wr...

Objective C中數字 字串

1.在c語言中我們討論的所有數字資料型別,int型 float型和long型都是oc語言中的基本資料型別,但他們都不是物件。如果需要儲存基本資料型別 包括char型 可以使用nsnumber類,它會根據這些資料的型別建立物件。以下是數字物件相見的操作方法。import int main int ar...

1162 數字 字串

時間限制 1000 ms 記憶體限制 65535 kb 難度 0 描述 有一行數字 現在定義 0表示空格,即這行數字被分割成若干個數 要求將這些數按照從小到大順序排列,若該行數字全為零 則表示為零,兩個數字之間可能有多個0,開頭和結尾可能都有0,所有的0都看成空格,數字的個數不超過100。輸入輸入有...