小编nic*_*n42的帖子

懒惰评估如何允许更大的模块化?

John Hughes 在他的文章" 为什么功能编程很重要 "中辩称,"懒惰评估可能是函数式程序员模块中最强大的模块化工具." 为此,他提供了一个这样的例子:

假设您有两个函数,"infiniteLoop"和"terminationCondition".您可以执行以下操作:

terminationCondition(infiniteLoop input)
Run Code Online (Sandbox Code Playgroud)

懒惰的评价,在休斯的话中"允许终止条件与循环体分离".这绝对是正确的,因为这里使用延迟评估的"terminationCondition"意味着可以在循环外定义这个条件 - 当terminationCondition停止请求数据时,infiniteLoop将停止执行.

但高阶函数不能达到如下相同的效果吗?

infiniteLoop(input, terminationCondition)
Run Code Online (Sandbox Code Playgroud)

懒惰评估如何提供高阶函数不提供的模块化?

haskell functional-programming lazy-evaluation higher-order-functions miranda

8
推荐指数
1
解决办法
238
查看次数

为什么Git有工作区,暂存区和本地存储库?

我试图理解为什么Git有很多地方可以存储更改.想象一个更简单的Git模型,它只有一个本地存储库(而不是一个单独的临时区域或工作区).在这个模型中:

  1. 我们可以在我们希望Git跟踪的本地存储库中选择文件
  2. 我们可以通过在不同时间点获取存储库的快照来跟踪更改
  3. 我们可以像往常一样获取对origin/master的更改并合并
  4. 我们可以有多个分支并在它们之间切换
  5. 我们可以像往常一样将更改从本地存储库推送到"origin"

换句话说,我们可以完成Git现在所做的大部分工作,但没有工作空间,暂存区域和本地存储库的概念混乱.为什么这三个都有用?

git

7
推荐指数
1
解决办法
4663
查看次数

为什么"class << self"中的自我指的是班级?

下面的代码输出"我是事."

class Thing
   class << self
      def foo
         puts "I am #{self}."
      end
   end
end

Thing.foo
Run Code Online (Sandbox Code Playgroud)

我认为"自我"指的是Thing类型的对象,但它指的是Thing类.我从上一个问题(在评论中链接)中收集到,这与Thing是Object的一个实例有关.从类<< self开始的块实际上是在"self"是指Thing作为实例的上下文中执行的吗?这里发生了什么?

ruby

4
推荐指数
2
解决办法
132
查看次数

如何在Ruby进程中捕获信号

我想捕获发送到Ruby进程的信号.

该进程是以下文件,名为wait.rb:

sleep 60

Signal.trap(15) {
  puts "caught signal 15!"
}
Run Code Online (Sandbox Code Playgroud)

我运行wait.rb,并在另一个bash shell中找到wait.rb的PID并执行:

kill -15 pid
Run Code Online (Sandbox Code Playgroud)

我期待"抓住信号15!" 将打印在我执行wait.rb的第一个shell中,但事实并非如此.相反,我得到这个输出:

Terminated: 15
Run Code Online (Sandbox Code Playgroud)

为什么块中的puts语句Signal.trap没有执行?

ruby unix signals

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