Maison  >  Questions et réponses  >  le corps du texte

一些关于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 Il y a quelques jours1020

répondre à tous(5)je répondrai

  • 天蓬老师

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

    1. Le symbole est un type de base (également une classe) en Ruby. C'est une constante et son utilisation est similaire à celle d'un type d'énumération
    2. .
    3. Les méthodes 1 et 2 sont équivalentes car self fait référence à cette classe à ce moment. La méthode 1 est généralement utilisée car elle peut éviter le problème de modification lors du renommage de la classe, et elle peut être ajoutée à l'extrait.
    4. attr_accessorGénérer des méthodes getter et setter. De même, attr_reader génère des getters et attr_writer génère des setters. Dans Ruby, il est courant d'exécuter des méthodes spéciales dans une classe. Ces méthodes sont généralement utilisées pour modifier (ou ajouter) certaines fonctionnalités de la classe.

    répondre
    0
  • 巴扎黑

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

    1.String est une variable en ruby ​​​​Le symbole est une constante
    2. 1 et 2 sont identiques. @ est un membre de classe. Il est très courant dans Ruby de fournir plusieurs façons d'appeler une méthode
    . 3. Équivalent à fournir la méthode getter/setert par défaut

    répondre
    0
  • 伊谢尔伦

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

    Votre question est contextuelle, je vous répondrai à l'envers, vous la comprendrez peut-être mieux :)

    3. attr_accesseur

    Exécutez le code et voyez les résultats. Comprenez simplement. attr_accessor est une méthode. Après exécution, la méthode sera ajoutée dynamiquement à la classe.

    C'est de la métaprogrammation en Ruby. Très génial a dit :

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

    1. symbole

    L'exemple de attr_accessor utilise tout à l'heure un symbole (commençant par deux points).

    Pourquoi ne pas utiliser des ficelles ? Parce que de nombreuses méthodes doivent être générées à l’aide de cette méthode, et qu’une méthode est un symbole, pas une chaîne. Plus en détail, j'ai découvert la différence entre un symbole et une chaîne lorsque j'écrivais mon propre interpréteur Lisp. Étant donné que Ruby prend en charge la métaprogrammation, il introduit certains concepts de compilateur pour améliorer la flexibilité du langage. C'est vraiment génial.

    2. Self équivaut à appeler directement des méthodes, qui appellent toutes deux des méthodes membres. Ce qui est appelé avec @ est la méthode de classe.

    C'est-à-dire que les méthodes de classe et les méthodes d'instance doivent être distinguées. Méthode de classe par rapport à la méthode membre.De nombreuses autres langues prennent également en charge cette différence.

    En bref, la méthode de classe peut être appelée sans instanciation, tandis que la méthode membre doit être instanciée avant de pouvoir être appelée.

    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/
    

    répondre
    0
  • 高洛峰

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

    Les méthodes de Ruby sont toutes appelées via un objet. L'objet est appelé le récepteur de la méthode. La méthode de l'objet est définie dans la classe à laquelle l'objet appartient.
    Comment déterminer le destinataire d’une méthode ? Les principes suivants peuvent être suivis.
    1. Lorsqu'il est appelé explicitement, le récepteur est évidemment l'objet que vous avez donné.
    2. Méthodes appelées implicitement dont le récepteur est soi.
    3.soi fait référence à :
    (1) Au sein d'un module/classe, self fait référence au module/classe (les modules/classes Ruby sont également des objets). Comme
    classe MaClasse
    self #Ici self est l'objet MyClass
    fin
    (2) Dans la méthode, self fait référence au destinataire de la méthode. Comme
    méthode def
    self #Ici, self est le récepteur
    utilisé lors de l'appel de cette méthode #Il est déterminé lorsque la méthode est appelée
    fin
    Celles commençant par @ sont des variables d’instance, qui sont deux choses différentes des méthodes.
    Il y a tellement de connaissances sur Ruby qu’il est difficile de l’expliquer clairement en quelques mots. Ce qui est mentionné ici n’est que la pointe de l’iceberg. Ruby possède un système logique très rigoureux et complet.

    répondre
    0
  • 天蓬老师

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

    attr_accessor est une déclaration
    Laissez-moi d'abord finir d'apprendre la grammaire

    répondre
    0
  • Annulerrépondre