我昨天在Magento的主页上问了这个问题静态块,它回答了我关于将cms /块挂钩到现有块的问题(在该示例中为内容).
但现在我想知道如何创建自己的块.
我在.phtml模板中有这个:
<?php echo $this->getChildHtml('home_flash') ?>
Run Code Online (Sandbox Code Playgroud)
这在我的cms.xml文件中
<reference name="home_flash">
<block type="cms/block" name="home-page-flash" before="content">
<action method="setBlockId"><block_id>home-page-flash</block_id></action>
</block>
</reference>
Run Code Online (Sandbox Code Playgroud)
但这不起作用.
我也曾尝试创建自己的块类型,(通过复制面包屑声明)在page.xml文件:
<block type="page/html_home_block" name="home_block" as="home_block" template="page/template/home_block.phtml"/>
Run Code Online (Sandbox Code Playgroud)
该文件存在但未呈现.
但是当我像这样引用块时:
<block type="page/html_breadcrumbs" name="home_block" as="home_block" template="page/template/home_block.phtml"/>
Run Code Online (Sandbox Code Playgroud)
它使得我的家乡块模板,但原来的CMS /块不重视它.
希望所有的不同的情况表明正在发生的事情,并强调在我的知识缺口不够好,有人来回答,我必须为"注册"我的新"home_block"类型的地方?
我有一个接受块的方法,让我们称之为外部。它依次调用接受另一个块的方法,将其称为内部方法。
我希望发生的是外部调用内部,传递给它一个调用第一个块的新块。
这是一个具体的例子:
class Array
def delete_if_index
self.each_with_index { |element, i| ** A function that removes the element from the array if the block passed to delete_if_index is true }
end
end
['a','b','c','d'].delete_if_index { |i| i.even? }
=> ['b','d']
Run Code Online (Sandbox Code Playgroud)
传递给 delete_if_index 的块被传递给 each_with_index 的块调用。
这在 Ruby 中是否可行,更广泛地说,我们对接收它的函数中的块有多少访问权限?
所以,我认为我很聪明,我添加这样的方法Object
:
class Object
def apply_if(cond)
if cond
yield self
else
return self
end
end
end
Run Code Online (Sandbox Code Playgroud)
这(我认为)允许我有条件地向方法链添加位,这简化了我的ActiveRecord查询操作.但它给出了语法错误,我可以将其简化为以下代码:
data = [1,2,3,4,5]
results = data.
apply_if(true and false) do |q|
q + [0,0]
end
Run Code Online (Sandbox Code Playgroud)
同样这个错误:
results = data.apply_if(true and false){|q| q + [0,0]}
Run Code Online (Sandbox Code Playgroud)
但这有效:
results = data.apply_if ((true and false)) {|q| q + [0,0]}
Run Code Online (Sandbox Code Playgroud)
同样如下:
results = data.apply_if (true && false) {|q| q + [0,0]}
Run Code Online (Sandbox Code Playgroud)
我看到这些差异都与运算符优先级有关,但是如何在一对括号内的运算符的优先级很重要?
为什么这里会出现语法错误?我没有看到任何可能的语法歧义,并且这种方法在形状上与Array#reduce方法相同.
我在这里尝试了许多组合 - 带有调用的显式块参数,方法定义中的各种类型的显式优先级.使用lambda而不是块工作正常,但显然太笨重,不能用于我的目的.
我正在使用Ruby进行SaaS课程.在练习中,我被要求通过使用迭代器,块和产量来计算两个序列的笛卡尔积.
我最终得到了这个,通过纯粹的猜测和错误,它似乎工作.但我不确定如何.我似乎理解基本块和产量用法,但是这个?一点也不.
class CartProd
include Enumerable
def initialize(a,b)
@a = a
@b = b
end
def each
@a.each{|ae|
@b.each{|be|
yield [ae,be]
}
}
end
end
Run Code Online (Sandbox Code Playgroud)
对我这样的菜鸟的一些解释好吗?
(PS:我将所需的课程名称更改为CartProd,因此人们通过Google搜索功能无法轻松找到答案)
根据这个Stackoverflow帖子:Objective-C库中的回调选择器或块,
块似乎是ObjC的未来.然而,就像匿名函数一样,块感觉更像是"起草"一个实现.此外,由于其"嵌入式"性质,我担心过度使用它们会破坏单元测试或"可测试"OOP意义上的模块化.
我找不到关于如何测试块以及如何协调块和常规方法的测试的指南.这个主题有很好的资源吗?
似乎双括号初始化增加了开销.
在方法中使用大括号是否也会降低性能?
例如.
public class DoIReducePerformanceToo {
public void aMethod() {
{
// Is it a bad idea to use these?
}
}
}
Run Code Online (Sandbox Code Playgroud)
我看了一下Java的语法,似乎这被归类为一个块:
Block:
{ BlockStatements }
BlockStatements:
{ BlockStatement }
BlockStatement:
LocalVariableDeclarationStatement
ClassOrInterfaceDeclaration
[Identifier :] Statement
Run Code Online (Sandbox Code Playgroud)
但我不确定语法双括号初始化的位置在哪里.
我的问题:在方法中使用块语句会降低Java中的性能吗?这些块与双支撑初始化具有相同的性质吗?
编辑:
内课即时:
ClassCreatorRest: Arguments [ClassBody]
ClassBody:
{ { ClassBodyDeclaration } }
Run Code Online (Sandbox Code Playgroud) 我想问一下javap除了传递给它的类的公共字段和方法之外还显示什么。
我正在查看一个只有一个静态变量的类文件。正如预期的那样,javap 将静态变量和类构造函数显示为输出,但它也显示如下内容:
static {};
Run Code Online (Sandbox Code Playgroud)
这条线是什么意思?
我试图创建一种校对命令控制台输入的方法,并检查以确保该字符串是一个rgb十六进制字符串.(例如:#FAF0E6)目前我正在尝试:除了:阻止.
def isbgcolor(bgcolor):
#checks to see if bgcolor is binary
try:
float(bgcolor)
return True
except ValueError:
return False
Run Code Online (Sandbox Code Playgroud)
我也试过使用.startswith('#').我已经看到了如何用Java编写这个函数的例子,但我仍然是初学者和Python我所知道的.救命?
我解释这个问题的最佳方法是使用以下图像.
这个:
需要看起来像这样:
我相信影响这两个容器对象(工作结果和结果查看器)的唯一代码是以下css片段.
.ItemCollection {
display: inline-block;
width: 45%;
}
Run Code Online (Sandbox Code Playgroud)
这是一个非常简单的css更改还是我需要添加更深入的编码来实现这一目标?
我想在块中使用弱自我,但是在块中这个 weakSelf 变为 nil
刚刚创建,在阻止之前(尝试使用不同的变体) - 看起来一切正常
但后来在块中 - 每个变体都为零
做错了什么?谁能解释一下?
编辑
SPHVideoPlayer *videoPlayer = [[SPHVideoPlayer alloc] initVideoPlayerWithURL:urlToFile];
[videoPlayer prepareToPlay];
Run Code Online (Sandbox Code Playgroud)
初始化
#pragma mark - LifeCycle
- (instancetype)initVideoPlayerWithURL:(NSURL *)urlAsset
{
if (self = [super init]) {
[self initialSetupWithURL:urlAsset];
}
return self;
}
- (void)initialSetupWithURL:(NSURL *)url
{
NSDictionary *assetOptions = @{ AVURLAssetPreferPreciseDurationAndTimingKey : @YES };
self.urlAsset = [AVURLAsset URLAssetWithURL:url options:assetOptions];
}
Run Code Online (Sandbox Code Playgroud)
还有使用块的方法
- (void)prepareToPlay
{
__weak typeof(self) weakSelf = self;
__weak SPHVideoPlayer *weakSealf2 = self;
NSArray *keys = @[@"tracks"];
[self.urlAsset loadValuesAsynchronouslyForKeys:keys completionHandler:^{ …
Run Code Online (Sandbox Code Playgroud)