我正在学习如何each在ruby中工作的细节,我尝试了以下代码行:
p [1,2,3,4,5].each { |element| el }
Run Code Online (Sandbox Code Playgroud)
结果是一个数组
[1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)
但我不认为我完全理解为什么.为什么each同一个数组的返回值?难道每个都不提供迭代方法吗?或者只是该each方法返回原始值的常见做法?
我知道这self是实例方法中的实例.那么,self类方法中的类是什么?例如,以下是否会在Rails中工作?
class Post < ActiveRecord::Base
def self.cool_post
self.find_by_name("cool")
end
end
Run Code Online (Sandbox Code Playgroud) GUI应用程序中的此代码编译并运行:
procedure TForm1.Button1Click(Sender: TObject);
begin
Self := TForm1.Create(Owner);
end;
Run Code Online (Sandbox Code Playgroud)
(使用Delphi 6和2009测试)
编辑:
更新:使用Self赋值的Delphi应用程序/库:
我正在阅读Mac上的 Mark Dalrymple的Learn Objective-C(仅在Protocols的章节,所以还是相对较新的)并试图找出一些东西:
你为什么要用自己的名字引用一个类?如果我上课了Foo,为什么我要写,比方说,
[[Foo alloc] init]
Run Code Online (Sandbox Code Playgroud)
并不是
[[[self class] alloc] init]
Run Code Online (Sandbox Code Playgroud)
如果我有一个子类Bar,第一个选项不会使我无效
[[Bar alloc] init]
Run Code Online (Sandbox Code Playgroud)
而第二种选择会允许吗?第一种选择什么时候会更好?
我正在关注Michael Hartl的RoR教程,它涵盖了密码加密的基础知识.这是目前的用户模型:
class User < ActiveRecord::Base
attr_accessor :password
attr_accessible :name, :email,: password, :password_confirmation
email_regex = /^[A-Za-z0-9._+-]+@[A-Za-z0-9._-]+\.[A-Za-z0-9._-]+[A-Za-z]$/
#tests for valid email addresses.
validates :name, :presence => true,
:length => {:maximum => 50}
validates :email, :presence => true,
:format => {:with => email_regex},
:uniqueness => {:case_sensitive => false}
validates :password, :presence => true,
:length => {:maximum => 20, :minimum => 6},
:confirmation => true
before_save :encrypt_password
private
def encrypt_password
self.encrypted_password = encrypt(password)
end
def encrypt(string)
string
end
end
Run Code Online (Sandbox Code Playgroud)
我发布了一个关于before_save不工作的上一个问题,事实证明我不小心做的是将我的encrypt_password写成:
def …Run Code Online (Sandbox Code Playgroud) 检查的目的是self.__class__什么?我找到了一些创建抽象接口类的代码,然后检查它self.__class__本身是否是自己的,例如
class abstract1 (object):
def __init__(self):
if self.__class__ == abstract1:
raise NotImplementedError("Interfaces can't be instantiated")
Run Code Online (Sandbox Code Playgroud)
那是什么意思?是要检查这个类是否是一种类型?
代码来自NLTK的http://nltk.googlecode.com/svn/trunk/doc/api/nltk.probability-pysrc.html#ProbDistI
这段代码是否正确
@implementation Vehicle
+(id) vehicleWithColor:(NSColor*)color {
id newInstance = [[[self class] alloc] init]; // PERFECT, the class is // dynamically identified
[newInstance setColor:color];
return [newInstance autorelease];
}
@end
Run Code Online (Sandbox Code Playgroud)
为何使用[自习班]
我认为自己已经指向静态方法的类(带+的那些)
刚开始学习python,我确信这是一个愚蠢的问题,但我正在尝试这样的事情:
def setavalue(self):
self.myname = "harry"
def printaname():
print "Name", self.myname
def main():
printname()
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
NameError: global name 'self' is not defined
Run Code Online (Sandbox Code Playgroud)
我看到这种使用self语句引用一些代码中不同方法的变量的方法,我读到它正常工作.
谢谢您的帮助
是否可以访问被引用的类/对象self,static以及$thisPHP中的匿名回调?像这样:
class Foo {
const BAZ = 5;
public static function bar() {
echo self::BAZ; // it works OK
array_filter(array(1,3,5), function($number) /* use(self) */ {
return $number !== self::BAZ; // I cannot access self from here
});
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法让它像通常的变量一样使用use(self)子句?
在Raymond Hettinger 在PyCon 2015上的演讲" 超级考虑超级发言 "中,他解释了super在多重继承环境中使用Python 的优势.这是雷蒙德在演讲中使用的一个例子:
class DoughFactory(object):
def get_dough(self):
return 'insecticide treated wheat dough'
class Pizza(DoughFactory):
def order_pizza(self, *toppings):
print('Getting dough')
dough = super().get_dough()
print('Making pie with %s' % dough)
for topping in toppings:
print('Adding: %s' % topping)
class OrganicDoughFactory(DoughFactory):
def get_dough(self):
return 'pure untreated wheat dough'
class OrganicPizza(Pizza, OrganicDoughFactory):
pass
if __name__ == '__main__':
OrganicPizza().order_pizza('Sausage', 'Mushroom')
Run Code Online (Sandbox Code Playgroud)
有人在台下问雷蒙德有关使用的差异self.get_dough(),而不是super().get_dough().我对Raymond的简要回答并不是很了解,但我编写了这个例子的两个实现来看看差异.两种情况的输出相同:
Getting dough
Making pie with pure untreated wheat dough
Adding: Sausage
Adding: …Run Code Online (Sandbox Code Playgroud) self ×10
class ×3
python ×3
ruby ×3
objective-c ×2
oop ×2
allocation ×1
arrays ×1
callback ×1
class-method ×1
delphi ×1
delphi-prism ×1
each ×1
inheritance ×1
instance ×1
interface ×1
php ×1
static ×1
super ×1
variables ×1
xcode ×1