我的Rails视图和控制器上到处是redirect_to
,link_to
和form_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正在寻找由对象的类名定义的路由,即雇员.这些员工路线未定义,并且没有员工控制器,因此也未定义操作.
之前已经问过这个问题:
routes.rb
将子类资源映射到父类(map.resources :employees, :controller => 'people'
).在同一个SO问题中的最佳答案建议使用代码库中的每个实例对象进行类型转换.becomes
routes.rb
,因为只有抓住从路由断裂link_to
和redirect_to
,但不从form_for
.所以他建议在父类中添加一个方法,让子类对它们的类撒谎.听起来不错,但他的方法给了我错误undefined …
根据"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中的多态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