方法如何在Ruby中查找工作?

时间:2017-12-28 01:39:30

标签: ruby

我的理解是方法查找扫描接收者的类和那里定义的方法。如果找不到,它会继续移动层次链直到找到它。这符合这种情况:

class A
  def hello
    p 'hello world'
  end
end

A.new.hello

其中helloA.new.class中定义。但是当我们在Class对象上调用方法时,它并不适合这种情况:

class A
  def self.hello
    p 'hello world'
  end
end

A.hello

这应该将A的特征类与方法hello - >联系起来。 Object - > BasicObject

Ruby通过查看接收者的类然后向上移动梯子来找到该方法。它应该看A.class Class的方法hello,从未找到方法a1 = [6 3 9 6 3 9 6 5]'; a2 = [7 8 2 3 7 7 6 7]'; a3 = [9 2 3 3 4 3 7 4]'; temp = table(a1,a2,a3); sortrows(temp,[1,2,3])

2 个答案:

答案 0 :(得分:1)

A的本征类是 apply plugin: 'com.android.application' android { compileSdkVersion 25 buildToolsVersion "25.0.3" defaultConfig { applicationId "com.morten.gpibwal.desakayuambon" minSdkVersion 17 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } dexOptions { } } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.volley:volley:1.0.0' compile 'com.android.support:cardview-v7:25.0.0' compile 'com.android.support:recyclerview-v7:25.0.0' compile 'com.github.bumptech.glide:volley-integration:1.4.0' compile 'com.android.support:appcompat-v7:25.3.1' compile 'com.android.support.constraint:constraint-layout:1.0.2' compile 'com.android.support:support-v4:25.3.1' compile 'com.android.support:design:25.3.1' testCompile 'junit:junit:4.12' },但是派生自Class的类:

Class

答案 1 :(得分:-1)

假设你修复你的程序 - 现在只是中止语法错误 - 使用class而不是Class,正如@sawa已经指出的那样,你的例子之间的区别是:

在第一个示例中,hello被定义为A的实例方法,即类型A的每个对象都具有此方法。 A.new是A类型,因此执行该方法。接收者是 A.new

的对象

在第二个例子中,hello被定义为A的类方法,即只有对象A本身(A是一个类,当然也是一个对象,因为一切都是一个对象)包含该方法hellow。如果你写A.hello A 就是接收者。