标签: block

我可以使用Ruby从内部引用lambda吗?

我希望能够使用Ruby从内部调用匿名lambda.考虑以下递归块(返回阶乘).我知道我可以将它分配给变量,并且该变量在lambda的范围内:

fac = lambda { |n| n == 1 ? 1 : n * fac.call(n - 1) }
fac.call(5)
Run Code Online (Sandbox Code Playgroud)

但是,我希望能够做到以下(因为没有实际原因,我只是对探索语言感兴趣):

(lambda { |n| n == 1 ? 1 : n * self.call(n - 1) }).call(5)
Run Code Online (Sandbox Code Playgroud)

我知道self是行不通的,因为是main对象.我做错了吗?我试图做一些不可能的事情 - 如果不是,这是因为某些理论上的限制还是仅仅是在Ruby中没有实现?

ruby lambda block

20
推荐指数
3
解决办法
3837
查看次数

关于C#中的lock语句的困惑

这来自MSDN:lock关键字确保一个线程不进入代码的关键部分,而另一个线程处于临界区.

难道一个关键部分必须是相同的关键部分

或者它的意思是:lock关键字确保一个线程不会进入代码对象保护的任何关键部分,而另一个线程处于由同一对象保护的任何关键部分.?

    class Program
{
    static void Main(string[] args)
    {
        TestDifferentCriticalSections();

        Console.ReadLine();
    }

    private static void TestDifferentCriticalSections()
    {
        Test lo = new Test();

        Thread t1 = new Thread(() =>
        {
            lo.MethodA();
        });
        t1.Start();

        Thread t2 = new Thread(() =>
        {
            lo.MethodB();
        });
        t2.Start();
    }
}

public class Test
{
    private object obj = new object();

    public Test()
    { }

    public void MethodA()
    {
        lock (obj) …
Run Code Online (Sandbox Code Playgroud)

c# multithreading locking block critical-section

20
推荐指数
2
解决办法
9119
查看次数

了解Scala块

我很难找到具体的答案,我所知道的是微不足道的.我想了解块如何在Scala中工作.我来自java/ruby​​背景,似乎scala有一种完全不同的使用块的方式.

以下代码来自Play!框架网站.我想了解Action在语义上是什么.是接受块的对象还是函数,或者两者都不接受.

object Application extends Controller {

  def index = Action {
    Ok(views.html.index("Your new application is ready."))
  }

}
Run Code Online (Sandbox Code Playgroud)

如果它是一个函数,也许它是以下的语法糖(在这种情况下scala如何在幕后传递块):

  def index = Action({
    Ok(views.html.index("Your new application is ready."))
  })
Run Code Online (Sandbox Code Playgroud)

或者它是一些我不知道的scala语法.

对Scala源代码的任何引用都将帮助我理解它在幕后的工作原理.

scala block playframework

20
推荐指数
2
解决办法
2797
查看次数

Ruby on Rails如何使用yield来进行布局?

yield用于调用块.这在Rails中如何yield用于布局?

-# application.html.haml
%body= yield
Run Code Online (Sandbox Code Playgroud)

它是在某处使用块还是简单地覆盖了方法?

ruby methods yield ruby-on-rails block

19
推荐指数
2
解决办法
1万
查看次数

PostgreSQL:块中无效的页眉

我收到了错误

ERROR:  invalid page header in block 411 of relation "t_value_time"
Run Code Online (Sandbox Code Playgroud)

在我的PostgreSQL数据库中.这种情况在不同的机器上发生.有没有办法防止它发生,或者至少告诉PSQL忽略无效块上的数据并继续前进?

我宁愿丢失块中的数据,让他跳过它,读取剩下的数据.有没有办法告诉PSQL跳过这个块?

postgresql block

19
推荐指数
2
解决办法
2万
查看次数

为什么"单一语句"块不需要使用分号?

我通常是一名C#程序员,去Delphi充满了"有趣"的发现.让我感到困惑的是德尔福的单一陈述.

示例C#block

if(x) 
  Foo();
else
  Bar();
Run Code Online (Sandbox Code Playgroud)

示例Delphi块:

if x then
  Foo() //note missing semicolon
else
  Bar();
Run Code Online (Sandbox Code Playgroud)

他们要求分号不在那里的目的究竟是什么?有没有可以追溯到Pascal的历史原因?

delphi block

19
推荐指数
2
解决办法
2335
查看次数

文件系统块大小

文件系统块大小的意义是什么?如果我的文件系统块大小设置为8K,这是否意味着所有读/写I/O都将发生在8K大小?因此,如果我的应用程序想要读取偏移4097处的16个字节,那么将读取从偏移量4096开始的4K块?

在这种情况下,写作如何工作?假设我想写64字节.

filesystems size block significance

19
推荐指数
2
解决办法
2万
查看次数

如何创建返回块的objective-c方法

-(NSMutableArray *)sortArrayByProminent:(NSArray *)arrayObject
{
    NSArray * array = [arrayObject sortedArrayUsingComparator:^(id obj1, id obj2) {
        Business * objj1=obj1;
        Business * objj2=obj2;
        NSUInteger prom1=[objj1 .prominent intValue];
        NSUInteger prom2=[objj2 .prominent intValue];
        if (prom1 > prom2) {
            return NSOrderedAscending;
        }
        if (prom1 < prom2) {
            return NSOrderedDescending;
        }
        return NSOrderedSame;
    }];

    NSMutableArray *arrayHasBeenSorted = [NSMutableArray arrayWithArray:array];

    return arrayHasBeenSorted;
}
Run Code Online (Sandbox Code Playgroud)

所以基本上我有这个用于排序数组的块.

现在我想编写一个返回该块的方法.

我该怎么办?

我试过了

+ (NSComparator)(^)(id obj1, id obj2)
{
    (NSComparator)(^ block)(id obj1, id obj2) = {...}
    return block;
}
Run Code Online (Sandbox Code Playgroud)

我们只是说它不起作用.

block objective-c objective-c-blocks

18
推荐指数
1
解决办法
1万
查看次数

使用块/ proc/lambda进行Ruby双管分配?

能够写出来真的很好

@foo ||= "bar_default"
Run Code Online (Sandbox Code Playgroud)

要么

@foo ||= myobject.bar(args)
Run Code Online (Sandbox Code Playgroud)

但我一直在寻找是否有办法写出类似的东西

@foo ||= do
  myobject.attr = new_val
  myobject.other_attr = other_new_val
  myobject.bar(args)
end
Run Code Online (Sandbox Code Playgroud)

在实际的功能代码中大致相当于类似的东西

@foo = if !@foo.nil?
         @foo
       else
         myobject.attr = new_val
         myobject.other_attr = other_new_val
         myobject.bar(args)
       end
Run Code Online (Sandbox Code Playgroud)

我想我可以编写自己的全局方法,如"getblock"来包装并返回任何常规块的结果,但我想知道是否已经有一种内置的方法来执行此操作.

ruby syntax block operators variable-assignment

18
推荐指数
1
解决办法
4273
查看次数

如何在一个块之外的swift中创建一个弱指针

我想像我们在Objective-c中所习惯的一样快速地指向自我

 __weak Something *weakself = self;
Run Code Online (Sandbox Code Playgroud)

我找到人们解释如何在一个街区内使用"弱自我",

    { in [unowned self] ...}
Run Code Online (Sandbox Code Playgroud)

但是我不想在我的块中定义'weakself',我想在块之外定义弱自己

closures block weak swift

18
推荐指数
2
解决办法
1万
查看次数