亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

ディレクトリ 検索
Ruby用戶指南 3、開始 4、簡單的例子 5、字符串 6、正則表達式 7、數(shù)組 8、回到那些簡單的例子 9、流程控制 10、迭代器 11、面向對象思維 12、方法 13、類 14、繼承 15、重載方法 16、訪問控制 17、單態(tài)方法 18、模塊 19、過程對象 20、變量 21、全局變量 22、實變量 23、局部變量 24、類常量 25、異常處理:rescue 26、異常處理:ensure 27、存取器 28、對象的初始化 29、雜項 RGSS入門教程 1、什么是RGSS 2、開始:最簡單的腳本 3、數(shù)據(jù)類型:數(shù)字 4、數(shù)據(jù)類型:常量與變量 5、數(shù)據(jù)類型:字符串 6、控制語句:條件分歧語句 7、控制語句:循環(huán) 8、函數(shù) 9、對象與類 10、顯示圖片 11、數(shù)組 12、哈希表(關聯(lián)數(shù)組) 13、類 14、數(shù)據(jù)庫 15、游戲對象 16、精靈的管理 17、窗口的管理 18、活動指令 19、場景類 Programming Ruby的翻譯 Programming Ruby: The Pragmatic Programmer's Guide 前言 Roadmap Ruby.new 類,對象和變量 容器Containers,塊Blocks和迭代Iterators 標準類型 深入方法 表達式Expressions 異常,捕捉和拋出(已經(jīng)開始,by jellen) 模塊 基本輸入輸出 線程和進程 當遭遇挫折 Ruby和它的世界 Ruby和Web開發(fā) Ruby Tk Ruby 和微軟的 Windows 擴展Ruby Ruby語言 (by jellen) 類和對象 (by jellen) Ruby安全 反射Reflection 內建類和方法 標準庫 OO設計 網(wǎng)絡和Web庫 Windows支持 內嵌文檔 交互式Ruby Shell 支持 Ruby參考手冊 Ruby首頁 卷首語 Ruby的啟動 環(huán)境變量 對象 執(zhí)行 結束時的相關處理 線程 安全模型 正則表達式 字句構造 程序 變量和常數(shù) 字面值 操作符表達式 控制結構 方法調用 類/方法的定義 內部函數(shù) 內部變量 內部常數(shù) 內部類/模塊/異常類 附加庫 Ruby變更記錄 ruby 1.6 特性 ruby 1.7 特性 Ruby術語集 Ruby的運行平臺 pack模板字符串 sprintf格式 Marshal格式 Ruby FAQ Ruby的陷阱
テキスト

Ruby和微軟的Windows



Ruby 的實現(xiàn)是基于 POSIX環(huán)境的,也就是說它可以利用unix程序員熟悉的所有的系統(tǒng)調用和系統(tǒng)庫。

同時,系統(tǒng)設計的時候擴展了對windows的支持,這章,我們將看看這方面的特性,并展示一些在windows下高效使用ruby的秘訣。

Ruby Ports

Windows does not provide a POSIX environment by itself, so some sort of emulation library is required in order to provide the necessary functions. There are several ports of Ruby for Windows: the most commonly used one relies on the GNU Win32 environment, and is called the ``cygwin32'' port. The cygwin32 port works well with extension libraries, and is available on the Web as a precompiled binary. Another port, ``mswin32,'' does not rely on cygwin. It is currently available as source code only. The remainder of this chapter will refer to the cygwin32 port.

在 Windows下運行Ruby

cygwin32版本的ruby發(fā)布包括兩個可執(zhí)行文件:ruby.exe ,rubyw.exe

ruby.exe 用在命令提示符下(dos shell),就像unix版本中的一樣。對于需要從標準輸入輸出進行讀寫操作的應用來說比較適合,但是這樣的話我們運行什么程序都需要額外多開了一個窗口,而不管我們需不需要這個窗口,有時候這樣就顯得不合適了,比如我們雙擊一個ruby腳本運行一個圖形接口(比如Tk),或者作為后臺程序運行,或者在別的程序中被調用。
在這種情況下,我們可以用rubyw.exe ,他和 ruby.exe 一樣,但是不提供標準輸入和標準輸出,或者標準錯誤,并且不會打開一個dos shell的窗口。

可以對ruby腳本(.rb結尾的文件)設定文件關聯(lián)[在用菜單 查看/選項/文件類型],然后雙擊這個文件就可以調用rubyw.exe來執(zhí)行這個程序了。

Win32API

如果你的ruby程序打算直接訪問win32api,或者用一些DLL的入口點,你將會用到Win32API擴展。

你可以用要訪問的DLL名字創(chuàng)建一個Win32API對象,表示對一個指定的DLL的入口點的調用,DLL的名字包括函數(shù),函數(shù)簽名(參數(shù)和返回值),建立的win32api對象就可以用來對指定的dll進行調用。

DLL的很多參數(shù)都是一定形式的二進制結構,Win32API用ruby的字符串對象處理這些參數(shù),進行來回的傳遞。你需要對這些字符串進行打包和解包(pack and unpack)

Windows Automation

如果你對使用低層次的windows API調用不感興趣,你可以使用windows utomation,ruby可以當成Windows Automation 的客戶。感謝 Masaki Suketa寫的 win32OLE擴展。下面例子是WIN32OLE發(fā)布包中提供的。

Windows 自動化允許自動化控制器(客戶端)向自動化服務器(Excel, Word, PowerPoint等)發(fā)送一個命令或者進行查詢。

你可以向WIN32OLE發(fā)送一個命令,從而可以執(zhí)行自動化服務器上具有相同名字的方法。例如,你可以創(chuàng)建一個WIN32OLE客戶,創(chuàng)建幾個全新的IE瀏覽器,并且顯示ie設置的主頁:

ie?=?WIN32OLE.new('InternetExplorer.Application')
ie.visible?=?true
ie.gohome

WIN32OLE并不知道這些方法(比如visiblegohome),它會把這些向它調用的方法傳到WIN32OLE#invoke,在這個方法里向自動化服務器發(fā)送正確的命令。

讀、寫自動化服務器的屬性

你可以用通常的哈希表示方法從自動化服務器讀寫服務器的屬性。比如,可以如下面一樣設定一個Excel chart的Rotation的值:

excel?=?WIN32OLE.new("excel.application")
excelchart?=?excel.Charts.Add()
...
excelchart['Rotation']?=?45
puts?excelchart['Rotation']

OLE對象的參數(shù)自動都會被設成屬性,也就是說你可以你可以通過給一個屬性賦值而設定一個參數(shù)。

excelchart.rotation?=?45
r?=?excelchart.rotation

因為這些屬性是常規(guī)的ruby訪問方法,而屬性名不能以大寫字母開頭,所以你要用rotation而不是Rotation。

命名參數(shù)(Named Arguments)

其他的能實現(xiàn)自動化客戶端的語言,比如VB,有一種叫做命名參數(shù)(named arguments)的概念,假設我們有這樣的一個VB方法:

Song(artist,?title,?length):????rem?Visual?Basic

要想調用這個方法,除了按順序寫全這三個參數(shù)來調用之外,我們可以用命名參數(shù)的方法:

Song?title?:=?'Get?It?On':??????rem?Visual?Basic

這等同于調用 Song(nil, 'Get It On', nil)
在Ruby中,可以在調用的時候用哈希結構來指定參數(shù)名和它的值,比如:

Song.new(?'title'?=>?'Get?It?On'?)

for each方法

VB有一個方法 ``for each''語句,可以在服務端對一個集合進行迭代, WIN32OLE對象也有一個方法完成相同的作用。

一個例子

下面這個例子,用到了微軟的Excel,覆蓋了上面說的很多概念。首先,我們創(chuàng)建了一個新的基于Excel的WIN32OLE對象,并增加了一些單元格,并給這些單元格賦值。然后,我們選中了一個區(qū)域,并創(chuàng)建了圖表(chart),我們通過給這個圖表的type屬性賦值,使它成為一個3D的圖表。然后,

The following example, using Microsoft Excel, illustrates most of these concepts. First, we create a new object attached to Excel and set some cell values. Next we select a range of cells and create a . We set the Type property in the excelchart object to make it a 3D chart. Next we'll loop through and change the chart rotation, 10?at a time. We'll add a few charts, and we'll use each to step through and print them out. Finally, we'll close down the Excel application and exit.

require?'win32ole'

#?-4100?is?the?value?for?the?Excel?constant?xl3DColumn. ChartTypeVal?=?-4100;

#?Creates?OLE?object?to?Excel excel?=?WIN32OLE.new("excel.application")

#?Create?and?rotate?the?chart

excel['Visible']?=?TRUE; workbook?=?excel.Workbooks.Add(); excel.Range("a1")['Value']?=?3; excel.Range("a2")['Value']?=?2; excel.Range("a3")['Value']?=?1; excel.Range("a1:a3").Select(); excelchart?=?workbook.Charts.Add(); excelchart['Type']?=?ChartTypeVal;

30.step(180,?10)?do?|rot| ????excelchart['Rotation']?=?rot end

excelchart2?=?workbook.Charts.Add(); excelchart3?=?workbook.Charts.Add();

charts?=?workbook.Charts charts.each?{?|i|?puts?i?}

excel.ActiveWorkbook.Close(0); excel.Quit();

優(yōu)化

As with most (if not all) high-level languages, it can be all too easy to churn out code that is unbearably slow, but that can be easily fixed with a little thought.

WIN32OLE來說, 我們要避免不必要的動態(tài)查找(dynamic lookups)。如果可能,盡量把WIN32OLE對象 賦給一個變量,然后引用這個變量的元素,而不要使用一大串的"." 構成的表達式。

比如,我們不應該寫出這樣的代碼:

workbook.Worksheets(1).Range("A1").value?=?1
workbook.Worksheets(1).Range("A2").value?=?2
workbook.Worksheets(1).Range("A3").value?=?4
workbook.Worksheets(1).Range("A4").value?=?8

我們可以通過把這些語句的前面部分放到一個臨時變量里,而使用臨時變量來執(zhí)行方法。

worksheet?=?workbook.Worksheets(1)

worksheet.Range("A1").value?=?1 worksheet.Range("A2").value?=?2 worksheet.Range("A3").value?=?4 worksheet.Range("A4").value?=?8


Extracted from the book "Programming Ruby - The Pragmatic Programmer's Guide"
Copyright ? 2001 by Addison Wesley Longman, Inc. This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, v1.0 or later (the latest version is presently available at http://www.opencontent.org/openpub/)).

Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder.

Distribution of the work or derivative of the work in any standard (paper) book form is prohibited unless prior permission is obtained from the copyright holder.
前の記事: 次の記事: