English 中文(简体)
页: 1
原标题:Static block in Ruby

我曾经是 Java方案家,当时我正试图把废墟变成废墟。 我只是试图在废墟中制定一个小型试验方案,我的用意如下。

  1. I want to create a simple linked list type of an object in ruby; where an instance variable in class points to another instance of same type.
  2. 我想活下来,把所有节点连接起来;在施工者被召唤之前,只有一次。 有些人说,我们通常在Java Static街区这样做。

  3. 初始化方法是一种在废墟上的构造签名。 是否有关于这些规则的规则? 和 Java一样,如果建筑商不是第1行(或称号后)的话,你就不能把另一个建筑商称作建筑商。

Thanks for the help. -Priyank

最佳回答

我想建立一个简单的链接清单类型,列出在废墟中物体的类型;如果类别中的事例变数与另一种类型相同。

只是一个快速的注解: 类型<>m>是鲁比的一个非常危险的词,特别是如果你来自 Java。 由于历史性事故,该词既用于动态打字,也用于静态打字,仅指两件表面上相关的,但又非常不同。

在动态打字中,一类是贴在 > > 值上的标签(not a reference)。

此外,在鲁比,类型的概念比 Java大得多。 在Java方案管理员的脑中,“类型”是指与“阶级”相同的东西(尽管这并不真实,因为Interface和primitives也是类型)。 在鲁比,“类型”是指“我可以做什么”。

例如:在 Java,当我说什么是String时,我就是指String类别的一个直接例子。 在鲁比,当我说什么是“String时,我指的是要么是这样。

  • a direct instance of the String class or
  • an instance of a subclass of the String class or
  • an object which responds to the #to_str method or
  • an object which behaves indistinguishably from a String.

我想活下来,把所有节点连接起来;在施工者被召唤之前,只有一次。 有些人说,我们通常在Java Static街区这样做。

在鲁比拉,一切都是可以执行的。 尤其是,不存在“级声明”这样的内容:一类机构就像任何其他机构一样,只是可辩驳的法典。 如果您的级别机构有一套方法定义清单,这些定义不是汇编者宣读的,然后变成一个类别物体。 这些说法由评价者逐一执行。

因此,你可以把你喜欢的任何法典放到一个班级机构,并在该班子成立时对该法典进行评价。 在班级机构范围内,<代码>自行受班级约束(即,班级与任何其他班次相同)。

初始化方法是一种在废墟上的构造签名。 是否有关于这些规则的规则? 和 Java一样,如果建筑商不是第1行(或称号后)的话,你就不能把另一个建筑商称作建筑商。

页: 1 建筑商只是工厂方法(有固定限制);如果你只使用一种(更强大的)工厂方法,就没有理由使用设计精良的语言。

设在Ruby的物体建筑工程也一样:物体施工分为两个阶段:al place 初始<>>。 分配采用一种称为<条码>的公开类别方法,即:<条码/代码>,该方法被定义为“级示例方法”<条码>,通常为never。 它只是为物体分配记忆空间,并设置了几个点,但此时此刻,这个物体并不真正可行。

初始使用人所在地是:这是一种称为<条码>的典型方法,即:,该方法确立了标的的内部状况,使之形成一个连贯、完全界定的国家,可供其他物体使用。

因此,为了充分建立一个新目标,你需要做的是:

x = X.allocate
x.initialize

[说明:目标方案者可承认这一点。]

然而,由于忘记打上“<>条码>(初始><>/代码>)太容易,作为一项一般规则,物体在施工后应完全有效,因此有一个称为“<条码>的新

class Class
  def new(*args, &block)
    obj = alloc
    obj.initialize(*args, &block)

    return obj
  end
end

[说明:实际上,<代码> 初始化<> /code> 是非公开的,因此,必须考虑到绕过诸如此等出入限制:obj.send(:初始化,*args, &block)

因此,这就是为什么要构造一个标的:<>->->--->一种公共类别方法Foo.new,但你implement<>-em> 一种私人实例方法Foo# initialize,似乎有许多新来者。

回答你的问题:由于初始使用人的方法就像任何其他方法一样,对于你可以做些什么,特别是你可以称之为“<条码>,无论何时何地,不论你是否愿意,都绝对没有任何限制。

BTW:由于 初始化<>/code> 和new 只是正常的方法,没有理由将其称作 初始化new。 这只是一项公约,尽管它相当强大,因为它体现在核心图书馆。 在你的情况下,你想写一个收集类别,收集类别提供替代工厂方法,称为<代码>[,以便我可以打电话<代码>List[1, 2, 3],而不是<代码>List.new(1, 2, 3)。

就像一个旁观:使用正常方法建造物体,明显的好处是,你可以建造匿名课堂。 这一点在 Java是不可能的,因为绝对没有任何合理的理由。 它之所以不工作的唯一原因是,建筑商的名称与班级相同,匿名班子没有名字,不能有建筑商。

虽然我不敢肯定,为什么你在提出反对之前需要做任何事情。 除非我失踪,否则基本上就没有名单。

class List
  def initialize(head=nil, *tail)
    @head = head
    @tail = List.new(*tail) unless tail.empty?
  end
end

a) 列入或列入

class List
  def initialize(*elems)
    elems.map! {|el| Element.new(el)}
    elems.zip(elems.drop(1)) {|prv, nxt| prv.instance_variable_set(:@next, nxt)}
    @head = elems.first
  end

  class Element
    def initialize(this)
      @this = this
    end
  end
end

简便链接清单?

问题回答

在任何方法声明之外,你可以简单地在班级机构初步确定你的类别变量。 它将像在 Java的静态初始器一样:

class Klass
   @@foo = "bar"

   def sayFoo
      puts @@foo
   end

   def self.sayFoo
      puts @@foo
   end

 end

类别领域@foo ,在此初步改为bar>

废墟的造物与这种生产一样。

class Class
  def new(*args)
    obj= self.allocate # get some memory
    obj.send(:initialize) # call the private method initialize
  end
end
  • Object#initialize is just an ordinary private method.
  • If you wan t something to happen before Object#initialize you have to write your own Class#new. But I see no reason why you would want to do that.

这基本上是9月份回来的分主题<>。

在此,我要说明,“静态初始剂”可以指其他代码。 在分类初始时,我模拟将特殊用户装满一次的设想。

class Foo
  def user
    "Thomas"
  end
end

class Bar
  @@my_user = Foo.new.user

  def my_statically_defined_user
    @@my_user
  end
end

b = Bar.new
puts b.my_statically_defined_user   # ==> Thomas




相关问题
UserControl constructor with parameters in C#

Call me crazy, but I m the type of guy that likes constructors with parameters (if needed), as opposed to a constructor with no parameters followed by setting properties. My thought process: if the ...

Strange "type class::method() : stuff " syntax C++

While reading some stuff on the pImpl idiom I found something like this: MyClass::MyClass() : pimpl_( new MyClassImp() ) First: What does it mean? Second: What is the syntax? Sorry for being such ...

Anonymous class question

I ve a little doubt over this line: An anonymous class cannot define a constructor then, why we can also define an Anonymous class with the following syntax: new class-name ( [ argument-list ] ) {...

Why copy constructor is not called in this case?

Here is the little code snippet: class A { public: A(int value) : value_(value) { cout <<"Regular constructor" <<endl; } A(const A& other) : value_(other....

Invoking an instance method without invoking constructor

Let s say I have the following class which I am not allowed to change: public class C { public C() { CreateSideEffects(); } public void M() { DoSomethingUseful(); } } and I have to call M ...

Object-Oriented Perl constructor syntax and named parameters

I m a little confused about what is going on in Perl constructors. I found these two examples perldoc perlbot. package Foo; #In Perl, the constructor is just a subroutine called new. sub new { #I ...