Ruby構文の基本

これは、主に録音のために、混乱して書かれます

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}"

出力は
乗算です:86400

nam = 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

上記のコードの最終的な出力は

[外部リンク画像の転送に失敗しました。ソースサイトにアンチリーチリンクメカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします(img-3ANX6p5X-1597048406819)(evernotecid:// 90B54479-F8FA-4F06-9F90-73E6593C6866 / appyinxiangcom / 27458002 / ENResource / p155)]

おすすめ

転載: blog.csdn.net/qq_41874930/article/details/107910711