これは、主に録音のために、混乱して書かれます
Rubyは大文字と小文字を区別します。つまり、endとENDの2つのメソッドは同じではありません。
a + bはa + bとして解釈されます(これはローカル変数です)
a + bはa(+ b)として解釈されます(これはメソッド呼び出しです)
複数行の文字列を印刷する
print << test
これは
2行目の
テストです
コンストラクタとデストラクタ
BEGIN { };#Constructor
END { };デストラクタ
コメント
Rubyコメントの使用#
以下も使用できます
=
これはコメントです。
これもコメントです。
これもコメントです。
これはまだコメントです。
=終了
データのタイプ
Rubyでサポートされるデータ型には、基本的な数値、文字列、範囲、記号、およびtrue、false、nilの特別な値が含まれます。配列とハッシュの2つの重要なデータ構造もあります。
Rubyのデータ割り当てはpythonと同じですが、データ型を事前に宣言していません。
a = 1 #intタイプ
a = '1' #stringlタイプ
ハッシュは辞書と同等です
demo = {"age" ==> 12、 "name" = "tom"} Pythonで
demo [age]を配置して値を読み取ります
H = {“ a”:“ January”}
はH [:a]を出力します
これはハッシュを作成することもできます
文字列の置換
シーケンス#{expr}を使用して、Ruby式の値を文字列に置き換えることができます。ここで、exprは任意のRuby式にすることができます。
puts "相乘 : #{ 24*60*60}"
出力は
乗算です:86400nam = tom puts "#{ nam}"",ok"
出力は
トム、オーケーです
変数タイプ
Rubyには4つのタイプの変数があります。
ローカル変数:Pythonのローカル変数に似ています。たとえば、関数内の変数の先頭にある記号は、_または_testなどの小文字です。
インスタンス変数:クラスに渡される操作可能な変数。Pythonと同様
def __init__(self,blog_list,name_list): self.out = [] self.flag = 0 self.url_list = blog_list self.name_list = name_list
しかし、ルビは次のコードを使用して表現します:
class Customer def initialize(id, name, addr) @ cust_id=id @cust_name=name @cust_addr=addr end
クラス変数:クラスのグローバル変数に似ています。すべてのオブジェクトを呼び出して、すべてのオブジェクトで共有できます。クラス変数の変数名の前に記号(@@)を配置します。
グローバル変数:これは通常のグローバル変数であり、記号は$です。
関数
関数はdefで始まり、endで終わり、メソッド名は常に小文字で始まる必要があります。
クラス
クラスはclassで始まり、endで終わります。オブジェクトを作成するときは、新しい関数を使用してください。呼び出しでは、クラスのメソッドのみを呼び出すことができ、値を直接呼び出すことはできません。クラスの名前は大文字で始める必要があります。
class Sample def hello puts "Hello Ruby!" end end #使用上面的类来创建对象 object = Sample. new object.hello
class Customer @@no_of_customers=0 def initialize(id, name, addr) @cust_id=id @cust_name=name @cust_addr=addr end end
Pythonでのクラスの値の初期化に似ています。
条件判断if else等
unless conditional then code else code end
unlessタイプとifタイプには逆の効果があります。つまり、conditionalがfalseの場合、コードが実行されます。条件が真の場合、else句で指定されたコードが実行されます。
…elseはpythonに似ていますが、コロンがありません。
x=1 if x > 2 puts "x 大于 2" elsif x <= 2 and x!=0 puts "x 是 1" else puts "无法得知 x 的值" end
トラバース
(10..15).each do |n| print n, ' ' end
hsh = colors = { "red" => 0xf00, "green" => 0x0f0, "blue" => 0x00f } hsh.each do |key, value| print key, " is ", value, "\n" end
それぞれのこの使用法は、…のfor…とほぼ同じです。
exp:
(0..5).each do |i| puts "局部变量的值为 #{ i}" end
for i in (0...5) puts "局部变量的值为 #{ i}" end
上記の2つのコードは、まったく同じ意味です。
方法
#!/usr/bin/ruby #-*- coding: UTF-8 -*- def test(a1="Ruby", a2="Perl") puts "编程语言为 #{ a1}" puts "编程语言为 #{ a2}" end test "C", "C++" test
コードを一目で見るPythonとの違いは、関数を呼び出すときに括弧を追加する必要がないことです。
ピース
def test puts "在 test 方法内" yield puts "你又回到了 test 方法内" yield end test { puts "你在块内"}
関数は、関数と同じ名前のブロックのみを呼び出すことができます。たとえば、上記のコードでは、テスト関数はテストブロックのみを呼び出すことができます。呼び出すときは、yieldで呼び出します。
モジュール
python importに似ていますが、使用されるコマンドはrequireまたはincludeです。
-
requireが
ファイルの先頭に配置されている場合、ターゲットファイル内のモジュールがこのファイルに対して要求され、それを使用する権利があることを意味します。これは、Pythonでのインポートとほぼ同じです。 -
Include
これは、モジュールをrubyクラスに埋め込む場合は、includeを使用する必要があります。
exp:
$LOAD_PATH << '.' #将模块的寻找地址定为当前目录 require "support" #申请加载模块support class Decade include Week #申请嵌入模块Week no_of_yrs=10 def no_of_months puts Week::FIRST_DAY #调用Week中的变量 number=10*12 puts number end end d1=Decade.new puts Week::FIRST_DAY Week.weeks_in_month #调用Week中的函数 Week.weeks_in_year d1.no_of_months
上記の例は、呼び出し構文を明確に説明しています。
パラメータの受信と出力
- getsは
pythonの入力に相当します
puts "Enter a value :" val = gets puts val
- putcは
一度に1文字を画面に出力し、putsはすべての文字を一度に出力します。
demo = "abc" putc demo #输出为a
- print
は出力をラップしません。他はputsと同じです。
demo = "abc" demo1 = "edf" print demo print demo1 #输出为abcdef
-puts
は文字列を出力してラップします。
demo = "abc" demo1 = "edf" puts demo puts demo1 #输出为 abc def
ファイル操作
- File.open
はファイルを開き、ブロックと対話できます。
File.open("filename", "mode") do |aFile| #... process the file end
r +は、ファイルの先頭にデータを追加することと同じです。
w +は、データを空にして再書き込みすることと同じです。
a +は、ファイルの最後にデータを追加することと同じです。
-
FIle.new
はファイルを開きますが、ブロックと対話できません。 -
sysread
aFile = File.new("input.txt", "r") if aFile content = aFile.sysread(20) puts content else puts "Unable to open file!" end
上記のコードブロックでのsysreadの意味は、input.txtの最初の20文字を読み取ることであり、ファイルポインターは21のこの位置にあります。
- syswrite
aFile = File.new("input.txt", "w+") if aFile aFile.syswrite("1") else puts "Unable to open file!" end
input.txtのすべてのデータを削除し、1を書き込みます。
- IO.foreach
IO.foreach("input.txt"){ |block| puts block}
入力のデータをブロックに渡し、1行ずつ出力します。
継承と超機能
継承の構文は
def add puts "c" end class B <A def add puts "a" super puts "b" end ```
上記のコードは、BがAを継承し、AがBの親クラスであることを示しています。
superは、親クラスから継承された追加関数を表します。
クラスにインクルードがある場合、つまりモジュールがインクルードされている場合、このクラスはモジュールの継承と同等であり、スーパー関数を使用してモジュール内の同じ名前の関数を呼び出すこともできます。
superの実行ロジックは、superに出会うまで独自のコードを実行することです。このとき、この関数のコードを親クラスで実行し、実行後もサブクラスの関数でコードを実行し続けます。
上記のコード図でも、サブクラスのadd関数が呼び出されると、出力されます
a
c
b
クラスAがモジュールとクラスの両方を継承する場合、モジュールの優先順位はクラスの優先順位よりも高くなります。つまり、最終的に継承されるモジュールは実際にはモジュールです。
p 'B a 1' end end module M def a p 'M a 1' #super p 'M a END' end end class A include M def a p 'a 1' end def a p 'a 2' super p 'a 2 END' end end b = A.new b.a
上記のコードの最終的な出力は