摘录Ruby编程语言:
module Functional
def compose(f)
if self.respond_to?(:arity) && self.arity == 1
lambda {|*args| self[f[*args]] }
else
lambda {|*args| self[*f[*args]] }
end
end
alias * compose
end
class Proc; include Functional; end
class Method; include Functional;
在Crystal中,有两种不同的方法可以实现类似的结果:
创建一个类..。
class Service
def self.get
# ...
end
end
或扩展self的模块
module Service
extend self
def get
# ...
end
end
两者都可以通过get通过Service.get调用方法。
但是什么时候使用类或模块呢?水晶的类和模块有什么区别?
模块中的“扩展自我”和module_function :name_of_method有什么区别?
示例:
module Foo
def bar
puts 'hi from bar'
end
def buu
puts 'hi from buu'
end
extend self
end
对比
module Foo
def bar
puts 'hi from bar'
end; module_function :bar
def buu
puts 'hi from buu'
class ResNet(nn.Module):
def __init__(self, output_features, fine_tuning=False):
super(ResNet, self).__init__()
self.resnet152 = tv.models.resnet152(pretrained=True)
#freezing the feature extraction layers
for param in self.resnet152.parameters():
param.requires_grad = f
下面两个例子有什么区别吗?是否有可能因为方法名称而在第二个示例中获得方法冲突?模块中的方法不是自动“封装”在这个模块中吗?
示例1
module ImageUtils
def self.preview(image)
#do something
end
end
示例2
module ImageUtils
def preview(image)
#do something
end
end
如果我将所有内容放入模块Foo中的类ImageUtils中,这有什么区别呢?
假设我在app/lib中有一个解析器模块(app/lib)
module Parsers
class XMLParser
def self.parse
"Parsing XML...."
end
end
class TXTParser
def self.parse
"Parsing TXT...."
end
end
end
我见过一些人这样叫他们:
@parse_xml = ::Parsers::XMLParser.p
有时我会看到这样的代码:
module Elite
module App
def app
'run app'
end
end
module Base
def base
'base module'
end
end
class Application
include Elite::Base #Include variant A
include ::Elite::App #Incl
我需要具有单例行为的类。
使用Singleton模块有什么区别...
require 'singleton'
class X
include Singleton
def set_x(x)
@x = x
end
def test
puts @x
end
end
X::instance.set_x('hello')
X::instance.test
使用类方法和类实例变量的...and?
class X
def self.set_x(x)
@x = x
e
有什么区别?
module Logging
def self.log
if @logger.nil?
@logger = Logger.new STDOUT
end
@logger
end
end
这个呢?
class Logging
def self.log
if @logger.nil?
@logger = Logger.new STDOUT
end
@logger
end
end
他们两人似乎都在做同样的事情。我为什么要选择一个而不是另一个?
class Test {
public function __construct() {
self::runTest();
Test::runTest();
}
public static function runTest() {
echo "Test running";
}
}
// echoes 2x "Test running"
new Test();
self::runTest()和Test::runTest()有什么区别吗?如果是这样,我应该使用哪一个?
在类内调用方法
使用一个事件控件和两个事件控件的始终块之间有什么区别?
module test;
logic a,b;
initial
begin
a = 0;
a = 1;
a=0;
a=1;
end
always@(posedge a)
// @(posedge a)
b = a;
initial $monitor(b); // uncommenting @(posedge a) results to 'x'. Otherwise results to '1&
我正在学习Python教程-
class Pizza(object):
@staticmethod
def mix_ingredients(x, y):
return x + y
def cook(self):
return self.mix_ingredients(self.cheese, self.vegetables)
>>> Pizza().cook is Pizza().cook
False
>>> Pizza().mix_ingredients is Pizza.mix_ingredi
在投票赞成 结束之前,我想说我的问题真的很简单(在上面提到的问题中没有提出)。
有两个模块,一个使用extend self定义模块方法,另一个定义mixin方法。
module A
extend self
def module_a_meth
"Called module_a_meth"
end
end
module B
def module_b_meth
"Called module_b_meth"
end
end
有一个类,其中我同时使用了include和extend这些模块:
class Test
include A
如果可能的重写在实现期间没有被标记为重写,有没有办法检查类方法是重写还是从基类继承的? class Super(object):
def method(self, x, y):
v = x + y
return v
class Sub1(Super):
def method(self, x, y):
v = x + y + 10 # the calcs are irrelevant, not a reliable way to determine if inherited
return v
class Sub2(Super):
def ownM
假设模块是包含的,而不是扩展的,那么模块实例变量和类变量有什么区别呢?
我看不出两者有什么不同。
module M
@foo = 1
def self.foo
@foo
end
end
p M.foo
module M
@@foo = 1
def self.foo
@@foo
end
end
p M.foo
我一直在模块中使用@ as @@,最近我看到其他代码也在模块中使用@@。然后我想我可能用错了。
因为我们不能实例化一个模块,所以对于一个模块,@和@@之间必须没有区别。我说错了吗?
为了回答一些关于评论和帖子的问题,我还测试了以下内容。
modu
既然self是指在其中调用instance_eval的对象,那么在instance_eval块中使用self进行方法定义有什么区别吗?
Z.instance_eval do
def x
end
def self.y
end
end
> Z.x
=> nil
> Z.y
=> nil
鉴于自我指的是Z,自我似乎是多余的。
ip与Sanic请求的remote_addr属性之间有什么区别?
源代码
@property
def ip(self):
"""
:return: peer ip of the socket
"""
if not hasattr(self, "_socket"):
self._get_address()
return self._ip
@property
def remote_addr(self):
"""Attempt to return
我有所有这些类都非常相似,除了它们的covar_module。我想知道我是否可以创建一个通用的超类,它拥有所有的属性和函数,而子类只有covar_module。我是python的新手,所以我不知道synthax会是什么样子。 class RbfGP(ExactGP, GPyTorchModel):
_num_outputs = 1 # to inform GPyTorchModel API
def __init__(self, train_X, train_Y):
# squeeze output dim before passing train_Y to