是类成员变量绑定还是免费(根据组合器)?

时间:2015-07-28 12:31:03

标签: c# functional-programming combinators

虽然我意识到自己并不是非常严谨,但我很确定组合器的简单术语只是一个没有自由变量的函数。例如,

f(x,y) = x * 2

将是一个组合者和

namespace ConsoleApplication1
{
    class BoundOrFree
    {
        private int _i = 0;

        public int f(int x, int y)
        {
            return x + y + _i;
        }
    }
}

不会是因为你会自由的。

所以,鉴于理解是否会将类定义中的成员变量视为“免费”?我猜它会,但我想检查我的假设。代码就像这个C#例子:

devise_for :users, :controllers => { :registrations => "registrations", :sessions => "sessions" },
                                    :path => "",
                                    :path_names => { :sign_in => 'login',
                                                     :sign_out => 'logout',
                                                     :sign_up => 'signup',
                                                     :edit => 'profile/edit' } do
  match '/update_password' => 'users/registrations#update_password', via: :post
end

在BoundOrFree.f中,成员函数是_i免费的吗?因此,f不是组合者吗?我假设这两个问题的答案都是肯定的,但我想证实我的假设。

1 个答案:

答案 0 :(得分:1)

  

不会是因为y是免费的

在这种情况下,你误解了“免费”一词。自由变量是从外部范围捕获的变量(通过闭包)。所以f(x,y) = x * 2 组合者。

回答你的问题

  

在BoundOrFree.f中,成员函数是_i免费的吗?因此,f不是组合者吗?

BoundOrFree::f函数不是组合子,因为它使用的变量不是唯一的参数。