标签: yield

我如何在Scala中生成一个immutable.Map?

我试过这个,但它不起作用:

val map:Map[String,String] = for {
    tuple2 <- someList
  } yield tuple2._1 -> tuple2._2
Run Code Online (Sandbox Code Playgroud)

如何将Tuple2s列表转换为Map?

for-loop scala yield map immutability

10
推荐指数
4
解决办法
7657
查看次数

Python - 了解生成器的发送功能

我正在用Python学习,yield发现这yield不仅是生成器输出返回值的方式,而且是将值放入生成器的方法.例如以下代码

def f():
    print (yield),
    print 0,
    print (yield),
    print 1

g = f()
g.send(None)
g.send('x')
g.send('y')
Run Code Online (Sandbox Code Playgroud)

在全球范围内,它send是值'x','y'发电机,因此f它将输出x 0 y 1.但我无法理解

  • 有2 yield秒但3 send秒.为什么要None在第一时间发送?
  • StopIteration最后抛出一个send.有什么方法可以避免这种异常吗?

有人可以解释一下吗?提前致谢.

python yield generator yield-keyword

10
推荐指数
1
解决办法
4846
查看次数

Ruby检查块是否为零

我用一个块调用一个方法;

method do
  "Hello"
end
Run Code Online (Sandbox Code Playgroud)

并且该方法被定义为;

def method
  yield
end
Run Code Online (Sandbox Code Playgroud)

在定义方法时 ; 我想检查给定的块是否为空(零),因为方法中的变量可能会像这样结束;

method do
  ""
end
Run Code Online (Sandbox Code Playgroud)

所以在定义中,我想检查yield块是否为nil.喜欢;

def method
  if yield ? yield : "Empty block? Seriously?"
end
Run Code Online (Sandbox Code Playgroud)

我知道上面的内容不起作用.这就是我想要实现的目标.

另请记住block_given?将始终为"true",因为即使它是nil空字符串,也会给出块.

更新:由于大多数意见/答案都表明问题不明确; 这是@ndn简化的问题:

我想检查执行块的结果是否为"空"(nil或"")而不先调用它.

ruby yield

10
推荐指数
3
解决办法
9677
查看次数

在Coroutine中"yield return 0"和"yield return null"之间有什么区别?

我是新人,对" yield" 有点困惑.但最后我明白它是如何运作的WaitForSeconds

但我看不出" yield return 0"和" yield return null" 之间的区别.

他们都在等待下一帧执行吗?

对不起,我的英语不好.非常感谢你.

c# ienumerator yield coroutine unity-game-engine

10
推荐指数
1
解决办法
7855
查看次数

使用Ruby`product`时如何防止来自块的`return`问题

正如每个Ruby程序员最终发现的那样,调用包含return语句的块或过程可能会很危险,因为这可能会退出当前的上下文:

def some_method(&_block)
   puts 1
   yield
   # The following line will never be executed in this example
   # as the yield is actually a `yield-and-return`.
   puts 3
end

def test
  some_method do
    puts 2
    return
  end
end

test

# This prints "1\n2\n" instead of "1\n2\n3\n"    
Run Code Online (Sandbox Code Playgroud)

如果您希望绝对确定调用块或proc 之后运行了一些代码,则可以使用begin ... ensure构造.但是,ensure如果在产量期间存在异常,也会调用它,这需要更多的工作.

我创建了一个小模块,以两种不同的方式处理这个问题:

  1. 使用safe_yield,检测生成的块或proc是否实际使用return关键字返回.如果是这样,它会引发异常.

    unknown_block = proc do
      return
    end 
    
    ReturnSafeYield.safe_yield(unknown_block)
    # => Raises a UnexpectedReturnException exception
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用 …

ruby yield

10
推荐指数
1
解决办法
234
查看次数

Java中的Thread.yield()和Thread.sleep(0)有什么区别?

可能重复:
Thread.sleep(0)和Thread.yield()语句是否等效?

根据我的理解,Thread.yield()和Thread.sleep(0)都应该让CPU重新判断某个调度算法运行哪个线程.

不同之处是:

  1. Thread.yield()是给其他线程的执行机会,但Thread.sleep(0)不会,它只会告诉CPU你应该重新安排执行线程,包括当前线程本身.

  2. Thread.yield()只是一个建议,这意味着它可能根本不被接受,但Thread.sleep(0)将强制进行重新排列.

以上两个结论是否正确?

java multithreading sleep yield

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

将IEnumerable与一个项目一起使用时有什么好处:yield return或return []?

这是" 你可以做很多方面 "的问题之一.请考虑以下代码:

protected virtual IEnumerable<ScriptReference> GetScriptReferences()
{
    ScriptReference referece = new ScriptReference();
    referece.Assembly = "FeyenoordEnabled";
    referece.Name = "FeyenoordEnabled.PassTextBox.js";

    return new ScriptReference[] { referece }; 
}

protected virtual IEnumerable<ScriptReference> GetScriptReferences()
{
    ScriptReference referece = new ScriptReference();
    referece.Assembly = "FeyenoordEnabled";
    referece.Name = "FeyenoordEnabled.PassTextBox.js";

    yield return referece;
}
Run Code Online (Sandbox Code Playgroud)

我只需要退回一件物品.第一段代码返回一个包含单个项目的数组,第二段代码生成该项目.什么更好,为什么?

.net c# ienumerable yield

9
推荐指数
2
解决办法
1294
查看次数

如果在synchronized方法中调用,thread.yield()是否会丢失对象的锁定?

我理解这Thread.currentThread().yield()是对线程调度程序的通知,它可以将cpu周期分配给具有相同优先级的其他线程(如果存在任何此类优先级).我的问题是:如果当前线程已经锁定某些对象和调用yield(),它会立即丢失该锁定吗?并且当线程调度程序发现没有这样的线程来分配cpu周期时,那个已调用的线程yield()将再次处于争夺状态以锁定它先前丢失的对象?

我在javadoc和论坛中找不到它[http://www.coderanch.com/t/226223/java-programmer-SCJP/certification/does-sleep-yield-release-lock]有50-50个答案.

我认为yield()(比如说thread1)应该释放锁定,因为如果某个相同优先级的线程(比如说thread2)想要对同一个对象进行操作,那么当线程调度程序最终将cup分配给thread2时它就有机会.

java multithreading synchronization sleep yield

9
推荐指数
2
解决办法
8485
查看次数

用C实现产量

例如:

int getNext(int n) {
    while (TRUE) {
        n = n+1;
        yield n;
    }
}

int main() {
    while (TRUE) {
        int n = getNext(1);
        if (n > 42)
           break;
        printf("%d\n",n);
    }
}
Run Code Online (Sandbox Code Playgroud)

这样上面的代码就会打印出1到42之间的所有数字.我想把yieldgetNext的地址改成后面的指令yield.但我无法弄清楚如何保存上下文(寄存器/变量),因为堆栈将由调用函数运行.

注意:

我意识到上面的代码可以通过静态变量轻松实现,但这不是重点.

c yield

9
推荐指数
1
解决办法
9732
查看次数

在生成器/ yield中包装fs.readFile

我试图在JavaScript和Node.js中了解生成器和产量,但是遇到了问题.

理想情况下,我想要做的是用生成器/ yield包装fs.readFile,这样我就可以同步使用它而不会阻塞任何东西.

我想出了以下代码:

function readFileSync (path) {
    return (function *(){
        return yield require('fs').readFile(path, function *(err, data){
            yield data;
        });
    })();
}

console.log(readFileSync('test-file.txt'));
Run Code Online (Sandbox Code Playgroud)

但是,不幸的是,readFileSync只是总是返回{}而不是文件内容.

希望我想要实现的目标仍然是可能的,或者我可能完全错过了生成器/产量的点,我完全错误地使用它,在这种情况下指出我出错的地方,任何资源都会很棒.

javascript yield generator node.js

9
推荐指数
2
解决办法
4055
查看次数