Thinking in XiaoQiang
          世人皆有悲哀,只有你不明白
          posts - 56,comments - 150,trackbacks - 0
          ????? ?看到這么多人點(diǎn)擊我的博客,?我很欣慰呀.?
          ?????? 大家可能有不認(rèn)識(shí)我的,我是京城IT業(yè)的一個(gè)小字輩,?混到今天確實(shí)很不容易.?我是從打字員做起的,打字,?復(fù)印傳真, 業(yè)務(wù)咨詢...
          ?????? 剛?cè)胄械臅r(shí)候,?先是學(xué)了一段VB,后來(lái)學(xué)過(guò)JAVA,?現(xiàn)在正在研究ruby.
          ?????? 經(jīng)歷過(guò)十冬臘月大雪紛飛,也經(jīng)歷過(guò)大雨傾盆.?有一年上班天寒地凍大雪鋪路,學(xué)院路上連條狗都沒(méi)有.?我在雪地里騎著自行車,吭哧吭哧了一個(gè)半小時(shí)才到公司.?然后想起來(lái)今天是周日不上班.? 這么艱苦的日子也有過(guò). 但是我也堅(jiān)持到了今天.
          posted @ 2006-11-08 23:03 小強(qiáng) 閱讀(1130) | 評(píng)論 (6)編輯 收藏

          轉(zhuǎn)自:http://mailboxpublic.googlepages.com/ubuntu%E6%98%AF%E6%80%8E%E6%A0%B7%E7%BB%83%E6%88%90%E7%9A%84

          這篇文章在互聯(lián)網(wǎng)上被廣泛轉(zhuǎn)載,但是很多都不完整,誤導(dǎo)新手。同時(shí)有許多人根本不尊重作者的辛勤勞動(dòng),沒(méi)有給原文署名。因此,我把它放到googlepages來(lái),作為正式的文章。如果有商業(yè)用途,請(qǐng)聯(lián)系本人:yulewang \at gmail \dot com

          ?[轉(zhuǎn)載請(qǐng)保持原樣,請(qǐng)勿擅自修改,以免誤導(dǎo)新手]
          yulewang 翻譯 整理

          二十一世紀(jì)到了,每個(gè)人都強(qiáng)調(diào)自己的個(gè)性,于是一種叫做DIY的東西悄然興起。
          操作系統(tǒng)作為全人類智慧的結(jié)晶,自然DIY起來(lái)難度極大,因而DIY出一個(gè)操作系統(tǒng)成就感絕對(duì)比買宜家的東西的成就感大。
          為了不至于從頭開始編寫一個(gè)操作系統(tǒng),我們當(dāng)然把采用現(xiàn)成的操作系統(tǒng)作為一個(gè)底線。
          當(dāng)然,我們可以通過(guò)LFS讓我們爽到底,但是,能夠做到LFS的人可真的是鳳毛麟角。而且更重要的是LFS簡(jiǎn)直在挑戰(zhàn)我的忍耐程度。
          我的這篇文章,教大家如何DIY一個(gè)自己的ubuntu發(fā)行版。在非常節(jié)省時(shí)間的情況下,達(dá)到耍酷的目的。

          就好比LFS一樣,我們需要一個(gè)創(chuàng)作基地。我們首先建立一個(gè)變量。建立這個(gè)變量的好處很明顯,即使你不用~/diy_ubuntu這個(gè)目錄,一樣可以照著這個(gè)文章繼續(xù)做下去。
          $ export WORK=~/diy_ubuntu
          $ mkdir -p $WORK

          然后我們把光盤鏡像文件掛到/mnt
          $ sudo mount -t iso9660 -o loop dapper-live-i386.iso /mnt
          $ cd $WORK

          復(fù)制文件光盤文件
          $ mkdir ubuntu-livecd
          $ cp -a /mnt/. ubuntu-livecd
          $ chmod -R u+w ubuntu-livecd
          $ sudo umount /mnt

          由于光盤中包含了很多windows下面的自由軟件,我們來(lái)把不必要的文件刪除。當(dāng)然你可以保留。
          $ rm -rf $WORK/ubuntu-livecd/programs

          把光盤中的壓縮文件掛起來(lái),這個(gè)樣子以后你可以在$WORK/old目錄中看到一個(gè)完整的linux操作系統(tǒng)的目錄。
          $ mkdir $WORK/old
          $ sudo mount -t squashfs -o loop,ro $WORK/ubuntu-livecd/casper/filesystem.squashfs $WORK/old

          我們建立一個(gè)2GB大小的文件系統(tǒng),然后把這個(gè)文件當(dāng)作一個(gè)設(shè)備文件格式化,結(jié)果系統(tǒng)給出了一個(gè)警告,別理會(huì)它,選擇是就是。
          $ sudo dd if=/dev/zero of=$WORK/ubuntu-fs.ext2 bs=1M count=2147
          $ sudo mke2fs $WORK/ubuntu-fs.ext2

          然后我們把這個(gè)空文件系統(tǒng)掛起來(lái)。
          $ mkdir $WORK/new
          $ sudo mount -o loop $WORK/ubuntu-fs.ext2 $WORK/new

          復(fù)制linux操作系統(tǒng)的文件.由于我們事先得到的linux是壓縮的,所以我們把它解壓了。
          $ sudo cp -a $WORK/old/. $WORK/new

          當(dāng)然現(xiàn)在$WORK/old就沒(méi)有用處了。廢掉它
          $ sudo umount $WORK/old

          我們首先進(jìn)入剛才得到的那個(gè)操作系統(tǒng)
          $ sudo cp /etc/resolv.conf $WORK/new/etc/
          $ sudo mount -t proc -o bind /proc $WORK/new/proc
          $ sudo chroot $WORK/new /bin/bash

          現(xiàn)在你就進(jìn)入系統(tǒng)了,高喊l(fā)inux for human beings,大煉ubuntu,想干什么就干什么。
          # vi /etc/apt/sources.list #選擇適合你的源
          # apt-get update
          # apt-get dist-upgrade
          # apt-get install 你想裝的軟件
          # apt-get clean
          .... #更多的配置
          最后離開你的那個(gè)操作系統(tǒng)
          # exit

          $ sudo umount $WORK/new/proc
          $ sudo rm $WORK/new/etc/resolv.conf
          現(xiàn)在你已經(jīng)回到了你的初始狀態(tài)中

          把manifest重新整一遍
          $ sudo chroot $WORK/new dpkg-query -W --showformat='${Package} ${Version}\n' > $WORK/ubuntu-livecd/casper/filesystem.manifest

          然后做一下“磁盤清理”
          $ sudo dd if=/dev/zero of=$WORK/new/dummyfile
          $ sudo rm $WORK/new/dummyfile

          重新壓縮系統(tǒng)
          $ sudo rm $WORK/ubuntu-livecd/casper/filesystem.squashfs
          $ cd $WORK/new
          $ sudo mksquashfs . $WORK/ubuntu-livecd/casper/filesystem.squashfs

          你的改動(dòng)都保存了。現(xiàn)在把$WORK/new廢掉
          $ cd $WORK
          $ sudo umount $WORK/new

          把文件的md5重新算一下
          $ cd $WORK/ubuntu-livecd
          $ sudo find . -type f -print0 |xargs -0 md5sum |sudo tee md5sum.txt

          建立光盤鏡像,命令很長(zhǎng),忍受著點(diǎn)。
          $ cd $WORK
          $ sudo mkisofs -o ubuntu-new.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -r -V "My Cool Ubuntu Live CD" -cache-inodes -J -l ubuntu-livecd
          然后你就可以用iso把光盤燒了

          然后你就可以在別人前面耍酷了。最后,王子和公主過(guò)著幸福的生活

          posted @ 2006-10-31 15:58 小強(qiáng) 閱讀(367) | 評(píng)論 (0)編輯 收藏
          Ubuntu Live CD 個(gè)性化定制全程圖解

          轉(zhuǎn)載,未測(cè)試

          個(gè)性化定制最為明顯的好處就在于能夠真正適合自己的需要。想要個(gè)性化定制 Ubuntu 的 Live CD 嗎?想要體驗(yàn) DIY 的樂(lè)趣嗎?本文將以圖解的方式全程為你提供指導(dǎo)與幫助。

          選擇工具

          “工預(yù)善其事,必先利其器”。選擇一款合適的定制工具,對(duì)于普通用戶來(lái)說(shuō)尤其重要。這兒有兩種 Ubuntu Live CD 的定制工具:UCK 和 Reconstructor。前者可以增刪 Live CD 中的語(yǔ)言包和應(yīng)用程序,后者能夠提供從 GNOME 桌面到應(yīng)用軟件的多方面定制功能。本文選擇 Reconstructor 作為 Ubuntu Live CD 的定制工具,讀者朋友也可以自行嘗試 UCK。

          前期準(zhǔn)備

          在正式定制之前,應(yīng)該做好這些方面的準(zhǔn)備工作:制作或收集需要用到的定制資源,如主題、壁紙、模塊等等;Ubuntu Live CD 的原始 ISO 映像(Reconstructor 支持 6.06 及 6.10);從 Reconstructor 官方網(wǎng)站下載定制程序;安裝 Reconstructor 的使用依賴,如 squashfs-tools、libbogl-dev、mkisofs 等(詳見(jiàn) readme.txt 文件)。

          定制過(guò)程

          執(zhí)行程序

          tar xvzj reconstructor-2.0.tar.gz
          cd reconstructor-2.0/
          sudo python reconstructor.py

          Reconstructor 在啟動(dòng)時(shí)會(huì)檢查使用依賴,并提示用戶安裝未完成的依賴。接著會(huì)進(jìn)入歡迎頁(yè)面。




          創(chuàng)建工作目錄
          Reconstructor 默認(rèn)會(huì)將工作目錄創(chuàng)建于 /home/username/reconstructor,另外分別創(chuàng)建 remaster、root、initrd 三個(gè)子目錄。工作目錄僅在首次使用時(shí)才有必要?jiǎng)?chuàng)建,如果是再次使用,則無(wú)需創(chuàng)建。因?yàn)槲覀兪浅醮问褂茫怨催x其中的三個(gè)選項(xiàng)。然后,在 Live CD ISO Filename 選擇先前下載好的原始 Ubuntu Live CD ISO 映像文件。




          定制引導(dǎo)屏幕
          引導(dǎo)屏幕這部分可以定制 Live CD Splash 圖像、引導(dǎo)選項(xiàng)文字的顏色、以及 Usplash 圖像。需要注意是,Splash 圖像要求是 pcx 格式,而 Usplash 則是編譯好的 so 文件(對(duì)于 Ubuntu 6.06,Reconstructor 支持直接生成)。設(shè)置后,點(diǎn)擊“Apply”按鈕以便生效。




          GNOME 桌面的定制
          GNOME 桌面包括登錄屏幕、桌面、主題三部分的定制。其中,在登錄屏幕中可以設(shè)置 GDM 主題、Splash 屏幕、背景顏色;桌面部分能夠定制壁紙和字體;在主題中可以選擇 GNOME 桌面所用的主題及圖標(biāo)。對(duì)于這些定制,用戶既可以選擇系統(tǒng)自帶的,也可以使用自己的。從 GNOME LOOK 上可以找到這方面的豐富資源。




          定制 Apt 源
          通過(guò)定制 Apt 源,就能夠直接在 Live CD 中使用這些擴(kuò)展的源,以便安裝需要的應(yīng)用程序。在你需要使用的源前打勾選擇即可。對(duì)于其他的源,可以輸入到下面的文本框中。




          優(yōu)化啟動(dòng)及關(guān)機(jī)過(guò)程
          在啟動(dòng)部分,可以選擇在系統(tǒng)啟動(dòng)時(shí)需要運(yùn)行的守護(hù)進(jìn)程,如 ppp、laptop-mode 等。同時(shí),Reconstructor 也能夠?qū)﹃P(guān)機(jī)過(guò)程進(jìn)行優(yōu)化。




          設(shè)置用戶及口令
          切換到 Live CD 選項(xiàng)頁(yè),對(duì)在 Live CD 中要用到的用戶、口令及主機(jī)名進(jìn)行設(shè)置。




          定制應(yīng)用程序
          Reconstructor 的模塊功能可以讓用戶按需定制應(yīng)用程序,如安裝程序、刪除程序等。普通用戶可以使用 Reconstructor 提供的現(xiàn)有模塊:包括圖像處理軟件、生產(chǎn)力軟件、多媒體軟件、網(wǎng)絡(luò)軟件、服務(wù)器軟件、及其他軟件等。如果現(xiàn)有模塊不能滿足你的要求,那么可以通過(guò)輸入安裝或刪除命令來(lái)實(shí)現(xiàn)對(duì)于軟件的定制。




          構(gòu)建選項(xiàng)
          注意以上每一個(gè)部分的定制都需要點(diǎn)擊“Apply”按鈕。現(xiàn)在按“Next”進(jìn)入構(gòu)建選項(xiàng)頁(yè)。在此設(shè)置 Ubuntu Live CD ISO 文件的保存路徑、名稱、架構(gòu)。如果所有的都沒(méi)有問(wèn)題,那么繼續(xù)下一步吧。




          定制結(jié)束
          此時(shí),需耐心等候一陣,直到看到 Finished 頁(yè)面。




          最后測(cè)試

          在 Ubuntu Live CD 定制結(jié)束后,先不要忙著刻盤,在虛擬機(jī)中測(cè)試一下,如果確認(rèn)沒(méi)有問(wèn)題,那么就燒錄并與朋友分享吧
          posted @ 2006-10-31 15:48 小強(qiáng) 閱讀(1008) | 評(píng)論 (0)編輯 收藏
          轉(zhuǎn)自:http://blog.rubypdf.com/2006/10/20/install-ruby-on-rails-lighttpdsqlite3-and-mongrel-under-ubuntu/

          nothing but the script I used:
          #install Mysql
          apt-get install mysql-server

          #install Ruby and relative
          apt-get install irb libdbm-ruby1.8 libgdbm-ruby1.8 libmysql-ruby1.8 libmysqlclient14 libopenssl-ruby1.8 libruby1.8-dbg mysql-common ri ri1.8 ruby1.8-dev

          #install rubygems
          wget http://rubyforge.org/frs/download.php/11289/rubygems-0.9.0.tgz
          tar zxfv rubygems-0.9.0.tgz
          cd rubygems-0.9.0
          ruby setup.rb
          gem update –system

          #install Rails and dependencies
          gem install rails –include-dependencies

          #before install Mongrel,
          apt-get install install build-essential #we need it to compile mongrel and Sqlite3

          #intall Mongrel
          gem install mongrel –include-dependencies

          #install Sqlite3
          apt-get install sqlite3 swig libsqlite3-ruby libsqlite3-dev
          gem install sqlite3-ruby #compile this need libsqlite.h

          #install Lighttpd
          apt-get install lighttpd

          some useful link
          http://mongrel.rubyforge.org/docs/lighttpd.html
          http://fo64.com/articles/2005/10/20/rails-on-breezy
          http://scottstuff.net/blog/articles/2006/07/23/typo-installer

          posted @ 2006-10-30 17:09 小強(qiáng) 閱讀(1056) | 評(píng)論 (2)編輯 收藏

          轉(zhuǎn)自:http://www.urbanpuddle.com/articles/2006/06/10/install-ruby-rails-on-ubuntu-dapper-drake

          This is a small guide I wrote up to installing Ruby on Rails on Dapper Drake. It covers getting lighttpd running to support both rails and php which will be useful to anyone who likes to use phpmyadmin along with ruby on rails. It's similar to the article I wrote earlier for Arch Linux except modified for Ubuntu's Dapper Drake release.

          1. Make sure the universe repository in /etc/apt/sources.list is uncommented:
          deb http://us.archive.ubuntu.com/ubuntu dapper universe
          deb-src http://us.archive.ubuntu.com/ubuntu dapper universe

          2. Make sure you are up to date:
          sudo apt-get update
          sudo apt-get dist-upgrade

          3. Install the ruby base packages:
          sudo apt-get install ruby ri rdoc mysql-server libmysql-ruby

          4. We need to grab the latest ruby gems from rubyforge. You may need to modify this command if a version after 0.90 is available.
          sudo wget http://rubyforge.org/frs/download.php/11289/rubygems-0.9.0.tgz
          tar -xvzf rubygems-0.9.0.tgz
          cd rubygems-0.9.0
          sudo ruby setup.rb

          5. Now let's install Ruby on Rails!
          sudo gem install rails --include-dependencies

          6. We have Rails but we still need lighttpd and mysql. I've thrown in PHP too in case you want to manage your database with phpmyadmin like I do. Let's grab all the packages, shall we?
          sudo apt-get install lighttpd php5-cgi php4-cgi php5-mysql php5-mysqli php4-mysql libfcgi-dev libfcgi-ruby1.8

          7. Modify your /etc/lighttpd/lighttpd.conf file to set up your domains. Be careful because by default Ubuntu maps all the images so that they are taken from /usr/share/images instead of your/rails/root/public/images so if you're wondering why your rails app is working but your images aren't being displayed this is why. You can take out the offending code in your lighttpd.conf or just put your images in /usr/share/images.

          8. Time to enable some modules for lighttpd. There are others that you may need but they should be enabled in your lighttpd.conf. Personally, I'm not a fan of enabling modules two different ways but I'm sure this will get cleaned up eventually.
          sudo /usr/sbin/lighty-enable-mod fastcgi
          sudo /usr/sbin/lighty-enable-mod proxy
          sudo /etc/init.d/lighttpd force-reload

          9. Let's make sure that there are no errors by stopping lighttpd and then starting it manually:
          sudo /etc/init.d/lighttpd stop
          sudo lighttpd -f /etc/lighttpd/lighttpd.conf

          If you have errors there make sure you take a look and try to address them! The output you see will be your best bet in getting help from somebody on one of the forums.

          10. Install some basic gems you might need to run your rails app:
          sudo gem install actionmailer
          sudo gem install activesupport
          sudo gem install actionpack
          sudo gem install actionwebservice

          And now you should have a new, shiny, ready to go Ubuntu Dapper Drake server just waiting for your PHP or Ruby on Rails applications!
          posted @ 2006-10-30 17:07 小強(qiáng) 閱讀(397) | 評(píng)論 (0)編輯 收藏
               摘要: Capistrano: Automating Application Deployment Application deployment is one of those things that becomes more and more complicated as the scale of your application increases. With just a single box...  閱讀全文
          posted @ 2006-10-30 14:00 小強(qiáng) 閱讀(912) | 評(píng)論 (0)編輯 收藏

          前幾天在我的blogjava上和CSDN上發(fā)過(guò)一個(gè)帖子: 說(shuō)一說(shuō)編程惡習(xí).
          http://community.csdn.net/Expert/topic/5091/5091887.xml
          http://www.aygfsteel.com/uiiang/archive/2006/10/16/75502.html

          幾天的時(shí)間收到了很多網(wǎng)友的回復(fù).
          我發(fā)這個(gè)帖子時(shí), 并不是想討論技術(shù)問(wèn)題, 也不是為了抱怨, 只是想以另一種方式, 來(lái)提醒一下編程的初學(xué)者, 和一些所謂"經(jīng)驗(yàn)豐富"的老程序員. 因?yàn)槲野l(fā)現(xiàn)傳統(tǒng)的寫一篇編程規(guī)范的文檔, 似乎并不能引起大家足夠的重視. 垃圾代碼仍然一出再出.

          我在帖子中所說(shuō)的問(wèn)題, 也并不需要太多的技術(shù)經(jīng)驗(yàn)和深厚的專業(yè)知識(shí). 都是一些隨手而來(lái)的小問(wèn)題, 解決這些問(wèn)題的方法只需要工作時(shí)認(rèn)真負(fù)責(zé), 多動(dòng)動(dòng)腦子就行了.

          在帖子的回復(fù)中, 有幾個(gè)回復(fù)讓我很在意:
          ==================================================================
          錢給的太少,能對(duì)付過(guò)去就完了
          社會(huì)上什么行業(yè)不是這樣,能對(duì)付就行了 。

          要改變這種情況, 那還要上邊有改變的想法,改善一下工作環(huán)境,等等。 。

          老板們吃的是良心,拉的是思想

          我們那么認(rèn)真干啥
          =====================================================================

          我對(duì)這種說(shuō)法非常的不贊同, 代碼寫的再差, 老板還是要賺他的錢, 該被剝削還是跑不了.
          可如果把這個(gè)當(dāng)成不認(rèn)真工作的理由, 那就只能永遠(yuǎn)自己吃虧了.
          如果總是這么不認(rèn)真工作, 不養(yǎng)成良好的工作習(xí)慣, 自已思考的習(xí)慣, 那就永遠(yuǎn)不能進(jìn)步
          只能當(dāng)一輩子代碼民工, 一輩子給這種垃圾老板打工.

          要明白一點(diǎn), 好的編程習(xí)慣, 思考能力, 都是在平時(shí)工作當(dāng)中, 一點(diǎn)一滴的積累起來(lái)的.
          并不是當(dāng)有人給了你一個(gè)好的工作環(huán)境后, 想變出來(lái)就能立刻變出來(lái)的.

          老板對(duì)不起咱們是另一回事, 但自己是不是能對(duì)得起自己, 那就看你自己的想法了

          態(tài)度決定一切

          posted @ 2006-10-30 10:28 小強(qiáng) 閱讀(2027) | 評(píng)論 (10)編輯 收藏

          ???????? 最近在做一個(gè)汽車銷售系統(tǒng)的改善工作, 這個(gè)系統(tǒng)已經(jīng)運(yùn)行兩年了, 兩年來(lái), 客戶不斷的提出新需求, 系統(tǒng)也在不斷的改來(lái)改去。 這次輪到我來(lái)改它了。 ? 想想 N 年前初學(xué)編程的時(shí)候, 書上, 網(wǎng)上, 雜志上不斷的在說(shuō), 要養(yǎng)成良好的編程習(xí)慣。 然后還給出了 N 長(zhǎng)的一大篇文章來(lái)介紹一些編程規(guī)范。 我這個(gè)人是很懶的, 大概的看了一下就過(guò)去了。 沒(méi)有特意的記什么。 好在我這個(gè)人也不是特別的懶, 對(duì)自己的工作也是很上心。 編程的時(shí)候盡可能做到更好。 性能功能能考慮到的都要做到最好。 ? 慢慢的也養(yǎng)成了一些編程的習(xí)慣, ? 時(shí)間長(zhǎng)了, 下意識(shí)的就去遵守一些模式,模范之類的東西了。
          ????????
          有了這些習(xí)慣, 再看這次修改的系統(tǒng), 真的是生可忍熟不可忍了。 ? 這次我也不說(shuō)什么編程規(guī)范了, 我就說(shuō)說(shuō)這些編程惡習(xí)

          ????????
          一, ? 程序沒(méi)有注釋
          ??????
          注釋 !! 注釋 !!! 如果只是打印了一個(gè) HELLO WORLD 您不注釋那也就算了, 如果是只有一兩百行的小功能類您不注釋, 那我也忍了, 可是 3000 多行一個(gè)類的業(yè)務(wù)邏輯代碼, 您老人家還不注釋 !!!?? TM 讓我怎么去改代碼, ? 一點(diǎn)業(yè)務(wù)邏輯的說(shuō)明都沒(méi)有, 我改代碼的時(shí)候,得一邊用 DEBUG 調(diào)試, 一邊替他加注釋。 然后才能進(jìn)行自己的工作。 幾千行的一個(gè)類, ? 一行注釋都沒(méi)有, TM 就不覺(jué)得顏色單調(diào)了點(diǎn)嗎 ?

          ??????
          二, ? 不遵守基本的編程約定
          ??????
          變量名大小寫混亂, 明明是變量, 非要完全大寫, 要不就大寫開頭。 要不就是方法名全是大寫, 最牛 B 的一個(gè)方法是用中文做方法名, 你丫這時(shí)候想起打中文來(lái)了, 累不累呀。

          ?????? 還有人用拼音做變量名方法名,就算您英文不好,稍微查一下金山詞霸行不行,現(xiàn)在百度和 GOOGLE 都有翻譯功能,稍微查一下英文,也當(dāng)是學(xué)英語(yǔ)了行不行? 您實(shí)在太忙的話,不查也就算了,拼音就拼音吧,好賴也算是中國(guó)話的。 可是您就別用拼音簡(jiǎn)寫了,英文簡(jiǎn)寫還認(rèn)不出來(lái)呢, 您還用拼音的開頭字母當(dāng)變量名, 那我 TM 上哪兒猜去呀!

          ?

          ?????? 三, 不明就里的代碼

          ?????? 系統(tǒng)中經(jīng)常會(huì)出現(xiàn)這樣的代碼,尤其是在 controller 里居多:

          ?????? // some code

          ?????? If(flag .equals(“submit”)){

          ?????? model.getInfo();

          }else{

          ?????? model.getInfo();

          }

          我沒(méi)寫錯(cuò), if else 調(diào)用的方法完全一樣,大家也放心,我仔細(xì)的看過(guò)調(diào)用的代碼,調(diào)用的方法里,也沒(méi)有根據(jù)其它情況來(lái)改變他的運(yùn)行路線。我就不明白為什么要做這個(gè) if 判斷了。擔(dān)心會(huì)有什么特殊的業(yè)務(wù)邏輯, 所以也不趕隨便去改他。 猜了半天,感覺(jué)最理想的答案是寫代碼的人,擔(dān)心以后會(huì)有新的邏輯分支, 所以在這里用 if 預(yù)留了一個(gè)位置, 以后改的時(shí)候方便。

          數(shù)日之后有幸遇見(jiàn)了當(dāng)初寫這代碼的老兄,問(wèn)過(guò)之后立刻暈倒,原來(lái)是這個(gè)代碼是參照別的模塊的樣子寫的,別的模塊在這里都有 N 個(gè)程序分支,通過(guò) if 來(lái)判斷后決定調(diào)用哪個(gè) model 里的方法。但他這個(gè)模塊很簡(jiǎn)單,沒(méi)有什么分支,就是調(diào)用那一個(gè)方法,但他寫代碼時(shí),看別人的模塊在這里都進(jìn)行 if 判斷了,所以覺(jué)得自己也應(yīng)該判斷一下,于是就出現(xiàn)了上面這樣的代碼。

          ?

          四, 面向過(guò)程式的編程方法

          遇到過(guò)好幾次 2000 多行的方法,所有業(yè)務(wù)邏輯,一氣呵成,就用了一個(gè)方法搞定。如果是簡(jiǎn)單的邏輯也就算了, 可是幾千行的代碼全放在一個(gè)方法里,一個(gè)類里有無(wú)數(shù)的重復(fù)代碼。 這回到好,重構(gòu)那本書沒(méi)白看, 現(xiàn)在有了實(shí)踐的機(jī)會(huì)了。

          難道您自己調(diào)試的時(shí)候就不覺(jué)得麻煩嗎? 我在這里不想討論什么面向過(guò)程還是面向?qū)ο螅矂e和我說(shuō)什么方法多了也不一定就是面向?qū)ο蟮乃枷搿?/span> 平時(shí)對(duì)自己寫的代碼多上點(diǎn)心, 大家都是在這行干了幾年的人了,把代碼寫的漂亮點(diǎn)有什么不好。

          ?

          五, 代碼縮進(jìn)混亂

          我們公司有規(guī)定,改代碼的時(shí)候,不許修改原有代碼的格式。 不管他多亂,也不許改。 我不明白這是為什么,也許是檢查代碼的人,要用文件比較工具吧。

          但這下苦壞我了, 代碼的格式那叫一個(gè)亂。 有頂著行頭寫的, 有向后空了 N 格的,大概是寫代碼的人, 為了方便自己找到正在調(diào)試的那段代碼,所以把代碼的縮進(jìn)變得和其它代碼與眾不同吧。 那您調(diào)試完了到是重新排一下版呀, 這真的不累~~, 現(xiàn)在的 IDE 工具都有自動(dòng)排版代碼的功能, 一個(gè)快捷鍵就搞定了,稍微勤快一點(diǎn)行嗎??

          BT 的一段代碼是縮進(jìn)居然出了屏幕!!! 你吃飽了撐的呀, 沒(méi)事縮那么遠(yuǎn)干嗎, 我根據(jù)后臺(tái)輸出找了半天也沒(méi)找到那段代碼在哪兒, 原來(lái)是因?yàn)榭s進(jìn)的太遠(yuǎn)了,不在屏幕范圍之內(nèi), 向右拉了半天滾動(dòng)條才找到。 你丫是不是寫著代碼睡著了? 臉正好砸在 TAB 鍵上。

          ?

          六, 多余的后臺(tái)輸出

          好幾個(gè)循環(huán)嵌套在一起~~~ 也行, 就算是因?yàn)闃I(yè)務(wù)邏輯需要,沒(méi)別的辦法也將就了。 好幾個(gè)循環(huán)嵌套在一起查數(shù)據(jù)庫(kù), 咱們最好還是開動(dòng)一下腦筋, 看看有什么更好的辦法。如果還是沒(méi)別的辦法, 那也湊合了。 可這種情況您就別在后臺(tái)輸出 SQL 語(yǔ)句啦, 每次一執(zhí)行程序,成百上千個(gè) SQL 語(yǔ)句在后臺(tái)輸出, 查數(shù)據(jù)庫(kù)才用了一兩秒,結(jié)果輸出這些 SQL 就用了半分鐘。 您自己就沒(méi)覺(jué)出程序慢在哪里嗎? 您調(diào)試程序的時(shí)候輸出一下也就算了, 提交到正式運(yùn)行的環(huán)境時(shí),就麻煩您,勞您大駕~~ 把那些輸出注釋掉吧,實(shí)在不行留幾個(gè)重要的輸出就行了。 讓這種代碼影響系統(tǒng)性能~~ 也太冤了吧。

          ?

          七, 打腫臉充胖子

          我也不知道這條算不算惡習(xí),也許不算,在有些人眼里還是好事。但也要看具體情況,經(jīng)常有些人寫代碼不喜歡用 IDE ,只用 EDITPLUS 這類工具。按常理說(shuō),初學(xué)者都應(yīng)該盡量用這些編輯器寫代碼,對(duì)加深學(xué)習(xí)印象有好處。也有人說(shuō)高手不屑于用那些 IDE ,我少見(jiàn)多怪, 這種絕頂高手我沒(méi)見(jiàn)過(guò)。

          但咱平時(shí)工作的時(shí)候,要的是效率,您不是那種高手就乖乖的用 IDE 吧。經(jīng)常見(jiàn)到有些人,為查一個(gè)方法的調(diào)用,搜來(lái)搜去的。真正的高手是工作效率最高的人,不是用最簡(jiǎn)單工具的人。


          //20061019 start
          ??????? 一些補(bǔ)充:?

          有些人提到用EDITPLUS的效率其實(shí)也很高, 這點(diǎn)我也承認(rèn). 但我想說(shuō)明一下, 我所見(jiàn)到的用EDITPLUS那個(gè)人, 根本沒(méi)有發(fā)揮出editplus應(yīng)有的效率和功能. 在他的手里editplus只是一個(gè)多了顏色區(qū)分的記事本. 編譯程序還是用javac , 也不會(huì)用ANT, 發(fā)布程序還是手工拷貝. 號(hào)稱四年經(jīng)驗(yàn)的程序員, 剛到公司時(shí)用了一天時(shí)間重裝好電腦后, 寫了一個(gè)打印hello world的程序測(cè)試環(huán)境. 結(jié)果不寫static void main方法, 直接就要用java去運(yùn)行. 運(yùn)行不成功還說(shuō)系統(tǒng)配置有問(wèn)題, 需要再重裝.? 每次幫他調(diào)試程序, 想查一個(gè)方法的調(diào)用, 一個(gè)文件一個(gè)文件的搜, 看得我這個(gè)急...........???? 我的希望是不管用什么工具, 要讓這個(gè)工具在自己的手里發(fā)揮出最大的作用來(lái), 如果用editplus非常純熟的話, 我也會(huì)很佩服那個(gè)人的, 而且會(huì)虛心的向他學(xué)習(xí)使用技巧

          可他把時(shí)間全耽誤在這上了, 這樣的工作效率, 加班都是活該的
          //20061019 end



          ??? 今天就寫這么多,
          大家還遇到過(guò)什么樣的編程惡習(xí),歡迎補(bǔ)充。

          大家不要總是抱怨什么工資太少,工作量太大。工作效率這玩意兒是要經(jīng)驗(yàn)來(lái)做基礎(chǔ),這沒(méi)錯(cuò),經(jīng)驗(yàn)少也沒(méi)事。咱平時(shí)寫程序的時(shí)候多上點(diǎn)心,多對(duì)自己的代碼思考一下,多動(dòng)動(dòng)腦子。自然就能總結(jié)出最好的工作經(jīng)驗(yàn)了,工作效率自然就提高了。

          也別總是說(shuō)什么 STRUTS 不好, HIBERNATE 太慢,不屑去用它。人家的程序能在全世界流行,自然有他的過(guò)人之處。多讀讀他的代碼,學(xué)習(xí)一下他到底好在哪里,如何才能把這些優(yōu)點(diǎn)應(yīng)用到自己的代碼上。這才是最重要的。

          ?也許咱們寫不出什么高超的代碼技巧,寫不出什么華麗的算法,但如果能在一些習(xí)慣,細(xì)節(jié)上做到精益求精,那也對(duì)得起自己的代碼了。


          ??? 寫出上面這些代碼的人,如果你的工資真的很少,那我只能惋惜的說(shuō)一句:你的工資是可憐了點(diǎn),但看您寫的這代碼,連這點(diǎn)工資都不應(yīng)該給你!!

          posted @ 2006-10-16 23:27 小強(qiáng) 閱讀(5643) | 評(píng)論 (45)編輯 收藏
          Ruby是何方神圣?

          Ruby是一種功能強(qiáng)大的面向?qū)ο蟮哪_本語(yǔ)言,她可以使您方便快捷地進(jìn)行面向?qū)ο缶幊?Ruby使文本處理和系統(tǒng)管理變得簡(jiǎn)單,與Perl非常相似.一句話:簡(jiǎn)單明了,擴(kuò)展性強(qiáng),移植性好.

          Ruby的幾大亮點(diǎn):

          • 語(yǔ)法簡(jiǎn)單
          • 垃圾回收
          • 可移植性
          • 動(dòng)態(tài)載入
          • 完全免費(fèi)
          • 正則表達(dá)式

          走向世界的Ruby

          松本行弘"Matz"(Matsumoto Yukihiro)是Ruby語(yǔ)言的發(fā)明人,他從1993年起便開始著手Ruby的研發(fā)工作。他一直想發(fā)明一種語(yǔ)言,使你既能進(jìn)行高效開發(fā)又能享受編程的快樂(lè)。1993年2月24日Ruby誕生了,1995年12月Matz推出了Ruby的第一個(gè)版本Ruby 0.95。不久Ruby便憑借其獨(dú)特的魅力橫掃日本,相信在不久的將來(lái),Ruby將走向世界。

          # 下載

          如何取得Ruby

          • 您可以從各個(gè)鏡像站點(diǎn)下載穩(wěn)定版ruby 1.8.1
          • 您還可以下載下一個(gè)穩(wěn)定版本的預(yù)覽版ruby 1.8.2 preview1
          • 我們用tar.gz把當(dāng)前CVS穩(wěn)定版快照(Fri Jul 30 04:00:51 JST 2004)保存下來(lái)。這是在1.8系列穩(wěn)定版的基礎(chǔ)上打了補(bǔ)丁的版本。若您需要比最終版本還要穩(wěn)定的版本的話,就請(qǐng)下載使用。
          • 每天晚上,我們都會(huì)用tar.gz把當(dāng)時(shí)的CVS最新版快照(Fri Jul 30 04:00:25 JST 2004)保存下來(lái)。因?yàn)楸4婵煺諘r(shí)沒(méi)有作任何修改,所以可能會(huì)有一些問(wèn)題。請(qǐng)您斟酌使用。
          • 我們使用tar.gz把當(dāng)前的1.6系列快照(Fri Jul 30 04:01:11 JST 2004)保存下來(lái)。該最新版本修正了1.6系列最終版本的所有錯(cuò)誤。若您暫時(shí)無(wú)法升級(jí)到1.8系列,卻又想修正1.6最終版本的錯(cuò)誤時(shí),就請(qǐng)使用該版本。
          • 請(qǐng)參考CVS指南來(lái)了解使用匿名CVS獲得最新源碼的方法。

          可下載項(xiàng)目

          FTP鏡像站點(diǎn)

          HTTP鏡像站點(diǎn)

          Rsync鏡像站點(diǎn)

          • rsync://sunsite.dk/ftp/mirrors/ruby/ (丹麥)
          • rsync://rsync.idaemons.org/ftp/mirror/ftp.ruby-lang.org/ruby/ (日本)
          • rsync://gd.tuwien.ac.at/languages/ruby/ (澳大利亞)
          • rsync://mirror.cs.mun.ca/ruby/ (加拿大)

          # 下載:文檔

          Ruby 1.6 參考手冊(cè)(日語(yǔ)版)
          下載發(fā)行版
          下載最新版
          Ruby 1.4 參考手冊(cè)(英語(yǔ)版)
          下載
          Ruby 1.4 參考手冊(cè)(日語(yǔ)版)
          下載
          Ruby教程(日語(yǔ)版)
          下載
          Ruby用戶指南(日語(yǔ)版)
          下載

          # Ruby教程

          Ruby安裝方法分類

          大體說(shuō)來(lái),Ruby的安裝方法可分為兩類。

          第一種方法,自己編譯源代碼然后開始安裝。在UNIX系列OS(Linux、NetBSD、FreeBSD、Solaris、HP-UX以及Windows中的Cygwin等等)平臺(tái)上采用這種方式安裝時(shí),操作方法大同小異且簡(jiǎn)便快捷。在Windows環(huán)境中,編譯環(huán)境的不同會(huì)帶來(lái)功能上的差異(請(qǐng)參考「不同的Microsoft Windows編譯環(huán)境所引起的差異」)。

          另一種方法就是使用針對(duì)不同平臺(tái)開發(fā)的各種便利的安裝工具。若您“不想編譯”或者想使用軟件包來(lái)安裝Ruby的相關(guān)軟件的話,我們推薦您使用這種方法。Linux環(huán)境下可以使用RPM或deb,若是FreeBSD的話則可以使用ports/packages等。但是,您必須擁有root權(quán)限才能使用軟件包進(jìn)行安裝。若您想安裝到自己的主目錄里的話,就必須自己編譯源代碼。

          Windows上的安裝方法有點(diǎn)特殊。在cygwin、mswin32或mingw這三種不同的編譯環(huán)境下,使用的安裝方法也不一樣。若您并不熟悉UNIX的話,我們建議您使用mingw或mswin32。

          此外在您編譯源代碼時(shí),您可以使用CVS以獲得最新版的源代碼。

          這里我們只介紹了一些典型的安裝方法,實(shí)際上,Ruby還可以支持很多其他的平臺(tái)。而且Ruby每天都會(huì)得到改進(jìn),因此本文件中的某些描述可能已經(jīng)與實(shí)際情況有所不同。若您發(fā)現(xiàn)我們的描述有誤或與實(shí)際情況不符的話,請(qǐng)您指正。同時(shí)若您有其他平臺(tái)上的相關(guān)信息的話,也請(qǐng)您補(bǔ)足。如您所見(jiàn),我們采用的是專人維護(hù)制度。當(dāng)您想幫我們補(bǔ)充資料的時(shí)候,請(qǐng)參考「RWiki的RD」。

          目錄

          按平臺(tái)分類的安裝指南

          (字母順序)

          • Alpha Machine
          • Borland C++ (從源代碼開始)
          • BTRON .超漢字
          • Cygwin (binary)
          • Cygwin (從源代碼開始)
          • Debian GNU/Linux
          • EWS4800
          • FreeBSD
          • HP-UX
          • Kondara MNU/Linux
          • MacOS X
          • mingw32 (binary)
          • mingw32 (從源代碼開始)
          • MS-DOS
          • mswin32 (binary)
          • mswin32 (從源代碼開始)
          • NetBSD
          • OS/2
          • Vine Linux
          • RPM系列Linux平臺(tái)
          • UNIX平臺(tái)
          • 用CVS保持更新

          Windows用戶提示

          開發(fā)環(huán)境

          • emacs + ruby-mode
          • xyzzy + ruby-mode
          • irb
          • irbsh
          • ReFe
          • Copal
          • RDE
          • RubyWin
          posted @ 2006-07-24 17:39 小強(qiáng) 閱讀(1142) | 評(píng)論 (1)編輯 收藏
          Ruby 基礎(chǔ)

          作者:Ralf Wirdemann, Thomas Baustert
          www.b-simple.de
          2006.2.14

          1.1 在線文檔和書籍

          ??? 語(yǔ)言資料上,如果要找核心和標(biāo)準(zhǔn)API的文檔可以去 www.ruby-lang.org,深步進(jìn)階我們推薦下面的書籍:

          Dave Thomas: Programming Ruby, Second Edition, Pragmatic Bookshelf, 2005
          Ruby書籍中的標(biāo)準(zhǔn)著作,極具推薦價(jià)值。
          Hal Fulton: The Ruby Way, Sams, 2001
          這部書不僅僅有Ruby語(yǔ)言的最新狀況,還提供了一百個(gè)案例,很有意思。

          1.2 引言

          ??? Ruby 是一個(gè)純粹的面向?qū)ο蟮膭?dòng)態(tài)型語(yǔ)言。Ruby 程序不是被編譯成二進(jìn)制格式(如Java),而是直接由一個(gè)解釋器來(lái)處理。這門語(yǔ)言在1995年由松本行弘(Matsumoto Yukihiro)發(fā)布,除了 Smalltalk、Python 等語(yǔ)言以外,Perl 對(duì)它的影響是首當(dāng)其沖的。
          ??? Ruby 里的一切都是對(duì)象,它沒(méi)有原始類型(如Java)。除了面對(duì)對(duì)象,Ruby還提供了垃圾回收、異常、正則表達(dá)式,為迭代器和方法作參數(shù)的“代碼塊”,運(yùn)行期的類擴(kuò)展,線程及更多的東西。Ruby 語(yǔ)言易懂易用,原因在于它簡(jiǎn)單、語(yǔ)法干凈。

          1.3 Ruby 程序

          ??? Ruby 程序保存在以 .rb 結(jié)尾的文件里。程序內(nèi)容包含類、模塊、或者只是簡(jiǎn)單的Ruby代碼。下面是地球人都知道的 Hello World 程序:

          # hello.rb????????????????????????
          puts "Hello World!"???????????????

          ??? 如果這個(gè)代碼是以 hello.rb 的文件名保存的,那么可以這樣調(diào)用:

          > ruby hello.rb???????????????????
          > Hello World!????????????????????

          ??? 在Windows下允許您以文件關(guān)聯(lián)的方式在IE中執(zhí)行;在 Linux/Unix 下您可按照自已的操作系統(tǒng)情況使用 Shebang行:

          #!/usr/local/bin/ruby?????????????
          puts "Hello World!"???????????????
          ??????????????????????????????????
          #!/usr/bin/env ruby???????????????
          puts "Hello World!"???????????????

          ??? 隨后直接執(zhí)行這個(gè)程序:

          > chmod 744 hello.rb??????????????
          > ./hello.rb??????????????????????

          ??? Ruby 的語(yǔ)句可以以分號(hào)結(jié)尾,但不是必須。 Ruby 是一個(gè)面向行的語(yǔ)言,也就是說(shuō),一個(gè)語(yǔ)句不需要以分號(hào)結(jié)尾,解釋器能夠明白下一行是進(jìn)一步的語(yǔ)句。下面前幾個(gè)語(yǔ)句的輸出相同,最后一個(gè)是錯(cuò)誤的:

          puts "Hello World!";??????????????

          puts "Hello World!"???????????????
          puts "Hello " \???????????????????
          ?? "World!";??????????????????????
          puts "Hello" +????????????????????
          ?? "World!";??????????????????????
          puts "Hello"?? # 語(yǔ)句至此結(jié)束?????
          ?? + "World!"; # 無(wú)法被解釋的新語(yǔ)句


          ??? 多個(gè)語(yǔ)句可以用分號(hào)隔開寫到一行里面,這不是很地道的寫法,因?yàn)闀?huì)影響閱讀的流暢。

          # 可行,但不漂亮:????????????????
          a = 42; b = 15; c = a + b????????

          #這樣比較好:?????????????????????
          a = 42???????????????????????????
          b = 15???????????????????????????
          c = a + b????????????????????????

          ??? Ruby 以兩個(gè)空格作為縮進(jìn)的方式(不用Tab鍵),這是個(gè)推薦習(xí)慣并且應(yīng)該盡可能地得到遵循:

          # 非常棒的縮進(jìn)???????????????????
          while line = file.readline???????
          ? if !comment_line(line)?????????
          ??? lines.add(line)??????????????
          ? end????????????????????????????
          end??????????????????????????????

          # oh~,oh~,您這是和外星人學(xué)的吧?
          while line = file.readline???????
          ??? if !comment_line(line)???????
          ??? ??? lines.add(line)??????????
          ??? end??????????????????????????
          end??????????????????????????????

          ??? Ruby 提供了全系列的標(biāo)準(zhǔn)類型,如數(shù)字、字符串、正則表達(dá)式、數(shù)組、哈希(Hash),等等。所有這些元素通過(guò)類和模塊的方式以備使用,無(wú)需在程序(文件)中綁定,它們來(lái)自于核心庫(kù)并在整個(gè)程序中自動(dòng)生效。
          ??? 另外一些是以其它類和模塊構(gòu)成系列的標(biāo)準(zhǔn)庫(kù)方式以備使用的,例如 Date、Logger、Test::Unit 等等。一旦要自行開發(fā)就必須在每個(gè)程序里通過(guò)關(guān)鍵字 require 來(lái)明確綁定。于是在 require 后加上或有或無(wú)結(jié)尾(.rb)的文件名。

          require "date"? # date.rb 用到 Date類??????????????
          require "my_class" # my_class.rb 用到MyClass類?????
          require "my_module" # my_module.rb 用到 MyModule模塊

          ??? 對(duì)此處文件名的處理不是按絕對(duì)路徑,Ruby 會(huì)在所有的標(biāo)準(zhǔn)目錄下尋找這個(gè)文件,它們被包含在全局變量$: 里面,您可以在命令行用 ruby -e "puts $:" 或其它方式得到這些路徑。一個(gè)裝載了類和模塊的程序里的所有名字都可以通過(guò)全局變量 $" 輸出。

          1.4 注釋

          ??? 在 Ruby 中注釋行是以#號(hào)開始的,注釋可出現(xiàn)在句首或句尾。

          # 下面這行是被注釋掉的???????????
          # a = b - c??????????????????????
          a = b + c # 注釋到行尾???????????

          ??? 一個(gè)注釋塊開始于 =begin 結(jié)束于 =end,這幾個(gè)關(guān)鍵字必須在行首,不能有空格。

          =begin???????????????????????????
          ? def my_method??????????????????
          ??? ...??????????????????????????
          ? end????????????????????????????
          =end?????????????????????????????

          1.5 數(shù)字

          ??? Ruby支持整數(shù)和浮點(diǎn)數(shù)。Ruby 里面沒(méi)有原始類型,都是數(shù)字對(duì)象。整數(shù)從負(fù)2的30次冪到正2的30次冪 (在64位機(jī)器上從負(fù)2的62次冪到正2的62次冪) 被定義成FixNum類型 超出此范圍的整數(shù)被定義成BigNum類型,類型的劃歸與轉(zhuǎn)換是自動(dòng)完成的,一個(gè)數(shù)字的長(zhǎng)度最終由主存來(lái)判定。

          value = 42 # FixNum???????????????????????????????
          big_value = 123456789012345678901234567890 # BigNum

          ??? 數(shù)字可以用16進(jìn)制、8進(jìn)制或者2進(jìn)制的數(shù)字系統(tǒng)來(lái)表示:

          # 42?????????????????????????????
          0x2A?????????????????????????????
          0052?????????????????????????????
          b101010??????????????????????????

          ??? 有相應(yīng)的數(shù)學(xué)運(yùn)算符以供使用,數(shù)字的增減用運(yùn)算符 += 與 -= 來(lái)實(shí)現(xiàn), 出自 C 和 Java 的 ++ 與 -- 在 Ruby 里是沒(méi)有的。

          a = 2????????????????????????????
          b = 3????????????????????????????
          c = a + b??? # 5?????????????????
          c = a - b??? # -1????????????????
          c = a / b??? # 0?????????????????
          c = 2.0 / b? # 0.666666666666667?
          c = a * b??? # 6?????????????????
          c = a**b???? # 2*2*2 = 8?????????
          a += 1?????? # a = 3?????????????
          a -= 1?????? # a = 2?????????????
          a++????????? # Ruby里非法????????

          ??? FixNum與BigNum 繼承于基類 Integer,以下是可用的函數(shù),是與塊(見(jiàn)1.14節(jié))結(jié)合的:

          1.upto(3) { [i] puts i }??? # 1 2 3?????????????
          3.downto(3) { [i] puts i }? # 3 2 1?????????????
          0.step(10,2) { [i] puts i } # 0 2 4 6 8 10??????
          3.times { puts *42* }?????? # 42 42 42??????????

          ??? 浮點(diǎn)數(shù)在 Ruby 里是用 Float 類來(lái)表示的。像其它語(yǔ)言一樣,Ruby 里的浮點(diǎn)也有卷折誤差。為了計(jì)算精確(如 合值),建議使用 Ruby 標(biāo)準(zhǔn)庫(kù)里的 BigDecimal 類,相對(duì)于 Float,這個(gè)類描述了更為豐富的浮點(diǎn)數(shù)并且避開了卷折誤差。

          1.6 字符串
          ?
          ??? 在 Ruby 里,字符串被放置在兩個(gè)單引號(hào)或雙引號(hào)之間。引號(hào)常會(huì)出現(xiàn)在另一個(gè)引號(hào)里面:
          ?
          str = "Hello"????????? # Hello
          str = "Hello 'Thomas'" # Hello 'Thomas'
          str = 'Hello'????????? # Hello
          str = 'Hello "Thomas"' # Hello "Thomas"
          ?
          ??? 字符串可以通過(guò) %q 和 %Q 產(chǎn)生,這是為了避免當(dāng)一個(gè)字符串內(nèi)出現(xiàn)過(guò)多的引號(hào)或其它符號(hào)時(shí)會(huì)出現(xiàn)這樣或那樣的錯(cuò)誤。%q 產(chǎn)生一個(gè)被包含在單引號(hào)中的字符串,%Q 產(chǎn)生一個(gè)被包含在雙引號(hào)中的字符串,文本以分隔符為界來(lái)限定,分隔符可以是除字母與數(shù)字以外的所有符號(hào)。

          %q{a string}
          %q(a string)
          %Q$a string$
          ?
          ??? %Q 可以替換 #{Ausdruck}這樣的表達(dá)式,而%q不能:
          ?
          表格1.1 字符串中帶雙引號(hào)的逃脫符
          \a 響鈴
          \b 退格
          \e 逃脫
          \f 換頁(yè)
          \n 換行
          \r 回車
          \s 空格
          \t Tab
          \v 垂直表格跳位
          \nnn 八進(jìn)制
          \xnn 十六進(jìn)制?
          \cx Control-x
          \C-x???? Control-x
          \M-x???? Meta-x
          \M-\C-x? Meta-Control-x
          \x?????? x
          #{code}? code


          puts %q{result: #{42.0/3} EUR}???? # result: #{42.0/3} EUR
          puts %Q{result: #{42.0/3} EUR}???? # result: 14.0 EUR
          ?
          ??? 在花括號(hào)、圓括號(hào)、角括號(hào)的情況下字符串是括號(hào)括起來(lái)的部分,其它則是到那個(gè)符號(hào)再次出現(xiàn)為止。字符串也可多行顯示,Ruby 在此并不清除起始空格符。
          ?
          s = %Q@ein String über mehrere?
          ?Zeile mit "" und '' und durch
          ? einen Klammeraffen begrenzt@
          puts s
          =>
          ein String über mehrere?
          ?Zeile mit "" und '' und durch
          ? einen Klammeraffen begrenzt
          puts s.inspect
          =>
          "ein String \374ber mehrere\n Zeile mit \"\" und '' ...
          ...und durch \n? einen Klammeraffen begrenzt"
          ?
          ???? 一個(gè)表達(dá)式的結(jié)果可以通過(guò)#{Ausdruck}插入到一個(gè)字符串中,然而這只有在雙引號(hào)之間有效。
          ?
          "Ergebnis #{42*7/100} %" # Ergebnis?????? #{2.94} %
          "Die Anwort ist: #{answer(x)}"??????????? # Die Anwort ist: 42
          ?
          ??? 如C與Java所慣用的,特殊符號(hào)由斜杠逃脫,表1.1列舉了所有的特殊符號(hào):
          ?
          "Ein Slash: \\"????????????? # Ein Slash: \
          "Er rief: \"Ralf!\""???????? # Er rief: "Ralf!"
          'War\'s okey?'?????????????? # War\'s okey?
          "Neue\nZeile"??????????????? # Neue
          ???????????????????????????? #Zeile
          'Neue\nZeile'??????????????? # Neue\nZeile
          ?
          ??? 兩個(gè)字符串的內(nèi)容可以用 == 方法來(lái)比較,與之相對(duì)照的是 equal? ,它用來(lái)判斷是否是同一個(gè)字符串實(shí)例(參看1.15.5節(jié)):
          ?
          s1 = "Thomas"
          s2 = "Thomas"
          s3 = "Ralf"
          s1 == s2 # => true
          s1 == s3 # => false
          s1.equal? s1 => true
          s1.equal? s2 => false
          s1.equal? s3 => false
          ?
          ??? 字符串可以用+和<<這兩個(gè)方法連接。使用 * 可實(shí)現(xiàn)多重累加。
          ?
          "Thomas" + "/Ralf"??? # Thomas/Ralf
          s = "Thomas"?
          s << " und Ralf"????? # Thomas und Ralf
          "Ralf " * 2?????????? # Ralf Ralf
          ?
          ?
          ??? 字符串類提供了大量的方法,讓你隨心所欲,下面是幾個(gè)例子;
          ?
          s = "Thomas und Ralf"
          s[3]????????????????? # 109
          s[3].chr????????????? # m
          s[7,3]??????????????? # und
          s[0..6]?????????????? # Thomas
          ?
          "Thomas und Ralf".delete("a")???????? # Thoms und Rlf
          "Thomas und Ralf".delete("aou")?????? # Thms nd Rlf

          "Thomas und Ralf".gsub("und", "oder") # Thomas oder Ralf
          "Thomas und Ralf".gsub(/[aou]/, "$")? # Th$m$s $nd R$lf
          ?
          "Thomas und Ralf".index('a')????????? # 4
          "Thomas und Ralf".index('a',5)??????? # 12
          ?
          "Thomas und Ralf".split?????????????? # ["Thomas", "und", "Ralf"]
          ?
          ??? 為字符串轉(zhuǎn)換成整數(shù)和浮點(diǎn)數(shù)提供兩種途徑,安全一些的是使用核心方法 Integer 和 Float, 它們?cè)诔鲥e(cuò)的時(shí)候拋出異常; 另一種是 String 類的方法 to_i 和 to_f,限制較少 。

          "42".to_i??????????? # => 42
          nil.to_i???????????? # => 0
          "42x".to_i?????????? # => 42
          Integer("42")??????? # => 42
          Integer(nil)???????? # => 0
          Integer("42x")?????? # => 參數(shù)錯(cuò)誤
          posted @ 2006-07-24 17:36 小強(qiáng) 閱讀(1776) | 評(píng)論 (0)編輯 收藏
          僅列出標(biāo)題
          共6頁(yè): 上一頁(yè) 1 2 3 4 5 6 下一頁(yè) 
          主站蜘蛛池模板: 镇安县| 永和县| 河西区| 肥城市| 浦城县| 金秀| 五河县| 兴业县| 惠州市| 固始县| 麦盖提县| 女性| 陵水| 府谷县| 天全县| 四川省| 安阳县| 治多县| 重庆市| 德化县| 巩留县| 桂东县| 巴林右旗| 麻栗坡县| 濮阳市| 拉孜县| 长兴县| 萨嘎县| 侯马市| 象山县| 重庆市| 阿克| 嫩江县| 芜湖市| 章丘市| 太康县| 乌兰浩特市| 拉孜县| 荆州市| 克东县| 酉阳|