Rumah  >  Soal Jawab  >  teks badan

一些关于ruby的初学者问题

我是因为用了coffee所以萌生出想学学ruby的想法的,因为才刚开始学习,所以有些问题可能比较初级。

Symbol对象的本质是什么?

我看的代码里大量使用了:xxxx之类的语法,我从网上查到这个叫Symbol,从用法上来看它的本质应该是不是一种不需要预定义,但是会被预编译的常量

在Class里指向自身?

作为从其他语言转向ruby的,我发现ruby在一个class调用this有如下几种

  1. 使用self.xxxx
  2. 直接调用当前类定义的xxxx方法
  3. 使用@

这给我这种习惯了在java, php这类语言里只有一种方法引用类本身的人带来了疑惑(当然java也可以省略this),可以具体解释下这三类用法的区别么?

在Class里直接写代码?

我在很多rails项目发现了这种代码

class Person
  attr_accessor :name

  def set_name(your_name)
    name = your_name 
  end
end

def ... end那个没啥问题,但是前面的attr_accessor :name怎么看怎么像一个正常的方法调用嘛,是这样吗?这里的方法跟一般的方法有啥不同?为啥要这样写。因为一般的语言class里都只是声明语法,虽然scala之类的语言也可以执行代码,但不知道ruby的这种写法有什么应用场景。

PHPzPHPz2761 hari yang lalu1016

membalas semua(5)saya akan balas

  • 天蓬老师

    天蓬老师2017-04-22 09:01:56

    1. Simbol ialah jenis asas (juga kelas) dalam Ruby Ia adalah pemalar dan penggunaannya serupa dengan jenis penghitungan
    2. Kaedah 1 dan 2 adalah setara kerana diri merujuk kepada kelas ini pada masa ini. Kaedah 1 biasanya digunakan kerana ia boleh mengelakkan masalah pengubahsuaian apabila menamakan semula kelas, dan ia boleh ditambahkan pada coretan.
    3. attr_accessorJana kaedah getter dan setter. Begitu juga, attr_reader menjana getter, dan attr_writer menjana setter. Dalam Ruby, adalah amalan biasa untuk melaksanakan kaedah khas dalam kelas Kaedah ini biasanya digunakan untuk mengubah suai (atau menambah) ciri tertentu kelas.

    balas
    0
  • 巴扎黑

    巴扎黑2017-04-22 09:01:56

    1. Rentetan ialah pembolehubah dalam ruby ​​​​Simbol ialah pemalar
    2. 1 dan 2 adalah sama @ ialah ahli kelas Ia adalah perkara biasa dalam Ruby untuk menyediakan pelbagai cara untuk memanggil kaedah
    3. Setara dengan menyediakan kaedah getter/setert lalai

    balas
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-22 09:01:56

    Soalan anda adalah kontekstual, saya akan balas ke belakang, anda mungkin lebih faham :)

    3. attr_accessor

    Laksanakan kod dan lihat hasilnya. Baru faham. attr_accessor ialah kaedah Selepas pelaksanaan, kaedah akan ditambah secara dinamik pada kelas.

    Ini ialah pengaturcaraan meta dalam ruby. Sangat hebat berkata:

    module Mod
      attr_accessor(:one, :two)
    end
    Mod.instance_methods.sort   #=> [:one, :one=, :two, :two=]
    

    1. simbol

    Contoh attr_accessor tadi menggunakan simbol (bermula dengan titik bertindih).

    Mengapa tidak menggunakan rentetan? Kerana banyak kaedah perlu dijana menggunakan kaedah ini, dan kaedah adalah simbol, bukan rentetan. Dengan lebih terperinci, saya belajar tentang perbezaan antara simbol vs rentetan apabila saya menulis penterjemah Lisp saya sendiri. Oleh kerana Ruby menyokong pengaturcaraan meta, ia memperkenalkan beberapa konsep pengkompil untuk meningkatkan fleksibiliti bahasa. Ini sangat hebat.

    2. Diri adalah bersamaan dengan kaedah panggilan terus, kedua-duanya memanggil kaedah ahli. Apa yang dipanggil dengan @ ialah kaedah kelas.

    Maksudnya, kaedah kelas dan kaedah contoh perlu dibezakan. kaedah kelas lwn kaedah ahli.Banyak bahasa lain turut menyokong perbezaan ini.

    Ringkasnya, kaedah kelas boleh dipanggil tanpa instantiasi, manakala kaedah ahli mesti digunakan sebelum ia boleh dipanggil.

    class foo def bar end end
    foo.new.bar #调用实例方法,必须先new
    
    class foo def self.bar end end 
    foo.bar #无需实例化
    
    ref:http://www.railstips.org/blog/archives/2009/05/11/class-and-instance-methods-in-ruby/
    

    balas
    0
  • 高洛峰

    高洛峰2017-04-22 09:01:56

    Kaedah Ruby semuanya dipanggil melalui objek Objek dipanggil penerima kaedah Kaedah objek ditakrifkan dalam kelas yang mempunyai objek.
    Bagaimana untuk menentukan penerima kaedah? Prinsip berikut boleh diikuti.
    1. Apabila dipanggil secara eksplisit, penerima jelas merupakan objek yang anda berikan.
    2. Secara tersirat dipanggil kaedah yang penerimanya adalah diri sendiri.
    3.diri merujuk kepada:
    (1) Dalam modul/kelas, diri merujuk kepada modul/kelas (modul/kelas ruby ​​juga objek). Seperti
    kelas MyClass
    diri #Di sini diri ialah objek MyClass
    tamat
    (2) Di dalam kaedah, diri merujuk kepada penerima kaedah. Seperti
    kaedah def
    diri #Di sini diri ialah penerima
    yang digunakan semasa memanggil kaedah ini #Ia ditentukan apabila kaedah dipanggil
    tamat
    Yang bermula dengan @ ialah pembolehubah contoh, yang merupakan dua perkara yang berbeza daripada kaedah.
    Terdapat begitu banyak pengetahuan tentang Ruby yang sukar untuk dijelaskan dengan jelas dalam beberapa perkataan. Ruby mempunyai sistem logik yang sangat ketat dan lengkap.

    balas
    0
  • 天蓬老师

    天蓬老师2017-04-22 09:01:56

    attr_accessor ialah pernyataan
    Biar saya habiskan belajar tatabahasa dulu

    balas
    0
  • Batalbalas