我的理解是方法查找扫描接收者的类和那里定义的方法。如果找不到,它会继续移动层次链直到找到它。这符合这种情况:
class A
def hello
p 'hello world'
end
end
A.new.hello
其中hello
在A.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])
?
答案 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 就是接收者。