小编zig*_*ism的帖子

处理rails中STI子类路由的最佳实践

我的Rails视图和控制器上到处是redirect_to,link_toform_for方法调用.有时link_to并且redirect_to在它们链接的路径中是明确的(例如link_to 'New Person', new_person_path),但很多时候路径是隐式的(例如link_to 'Show', person).

我将一些单表继承(STI)添加到我的模型中(比方说Employee < Person),并且所有这些方法都会破坏子类的实例(比如说Employee); 当rails执行时link_to @person,它会出错undefined method employee_path' for #<#<Class:0x000001022bcd40>:0x0000010226d038>.Rails正在寻找由对象的类名定义的路由,即雇员.这些员工路线未定义,并且没有员工控制器,因此也未定义操作.

之前已经问过这个问题:

  1. StackOverflow,答案是编辑整个代码库中link_to等的每个实例,并明确说明路径
  2. 再次在StackOverflow上,有两个人建议使用routes.rb将子类资源映射到父类(map.resources :employees, :controller => 'people').在同一个SO问题中的最佳答案建议使用代码库中的每个实例对象进行类型转换.becomes
  3. StackOverflow的另一个问题,最重要的答案是在Do Repeat Yourself阵营中,并建议为每个子类创建重复的脚手架.
  4. 这里是再次同样的问题在SO,其中顶部的答案似乎只是错误的(Rails的魔法可以工作了)
  5. 在网络的其他地方,我发现了这篇博文,其中F2Andy建议在代码中的任何地方编辑路径.
  6. 在Logical Reality Design 上的单表继承和RESTful路由的博客文章中,建议将子类的资源映射到超类控制器,如上面的SO答案2中所示.
  7. 亚历克斯·赖斯纳有一个帖子在Rails的单表继承中,他主张对映射子类在父类的资源routes.rb,因为只有抓住从路由断裂link_toredirect_to,但不从form_for.所以他建议在父类中添加一个方法,让子类对它们的类​​撒谎.听起来不错,但他的方法给了我错误undefined …

ruby ruby-on-rails single-table-inheritance

169
推荐指数
7
解决办法
3万
查看次数

创建一个有限许多居民的Haskell类型

根据"Haskell的好消息",Bool的类型声明是

data Bool = True | False
Run Code Online (Sandbox Code Playgroud)

并且Int的类型声明可以被认为是类似的

data Int = -2147483648 | -2147483647 | ... | -1 | 0 | 1 | 2 | ... | 2147483647
Run Code Online (Sandbox Code Playgroud)

对于一些抽象代数应用程序,我想创建一个具有有限多个指定值的类似类型,例如,值可以是$ 0 $和$ n $之间的整数,对于某些$ n $.尽管声称Int的定义,以下不起作用:

data F3 = 0 | 1 | 2
Run Code Online (Sandbox Code Playgroud)

错误"类型中的非法文字".如何创建一个这些是唯一居民的类型?类似于:

data F a = (Int a) => [0..a]
Run Code Online (Sandbox Code Playgroud)

会非常棒.

另外,我可以创建一个枚举类型的所有有效值的函数,还是返回值列表?

haskell types

7
推荐指数
2
解决办法
370
查看次数

在Haskell中实现多态λ演算/系统F的对编码

我想在Haskell中的多态lambda演算中实现该对的Church编码.

Peter Selinger关于lambda演算的注释的第77页第8.3.3节中,他给出了两种类型的笛卡尔积的构造.

A×B =∀α.(A→B→α)→
α⟨M,N⟩=Λα.λfA →B→ α.fMN

对于另一个来源,在第54页,DiderRémy关于lambda演算的注释的第4.2.3节,他将多态λ演算/系统F中的对的教会编码定义为

Λα₁.Λα₂.λx₁:α₁.λx₂:α₂.Λβ.λy:α₁→α₂→β.y x 1 x 2

我认为雷米和塞林格一样,更加啰嗦.

无论如何,根据维基百科,Haskell的类型系统基于System F,所以我希望可以直接在Haskell中实现这个Church编码.我有:

pair :: a->b->(a->b->c)->c
pair x y f = f x y
Run Code Online (Sandbox Code Playgroud)

但我不知道如何进行预测.

Λα.Λβ.λp α×β .pα(λx α .λy β .X)

我是否将Haskell forall用作首都lambda类型量词?

这与我之前的问题基本相同,但在Haskell而不是Swift中.我认为额外的环境和场地的变化可能会让它变得更加明智.

polymorphism haskell functional-programming lambda-calculus church-encoding

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