我正在努力为网站添加Google登录按钮.在文档中,Google提供了两个选项,即"基本"按钮:
https://developers.google.com/identity/sign-in/web/sign-in
和一个"自定义"按钮使用signin2.render():
https://developers.google.com/identity/sign-in/web/build-button
我遇到的问题是两个按钮表现出不同的行为.如果我使用任一按钮登录,则按钮的"标题"会从"登录"更改为"已登录"以反映登录状态.但是,如果我现在刷新页面,则基本按钮保留标题"已登录",而自定义按钮将其标题更改回"登录",建议(错误地)登录状态已通过页面更改刷新.
如果我通过运行以下命令在浏览器控制台中手动检查登录后的登录状态:
auth = gapi.auth2.getAuthInstance()
auth.isSignedIn.get()
Run Code Online (Sandbox Code Playgroud)
我得到true了一个返回,表明刷新确实没有改变登录状态,这与按钮标题的改变相反.
所以我的问题是:如何使自定义按钮的行为与基本按钮相同,以便其标题在刷新时不会改变?我喜欢的基本按钮的另一个(相关的,我假设的)行为是在每个页面加载时调用按钮的"onsuccess"回调(如果用户已登录),而自定义按钮不执行此操作.所以我也想在自定义按钮上更改此行为以匹配基本按钮的行为.任何建议将不胜感激!
我传递给渲染的参数如下所示:
function renderButton() {
gapi.signin2.render('mybutton', {
'scope': 'profile email',
'width': 125,
'height': 40,
'longtitle': false,
'theme': 'light',
'onsuccess': onSuccess,
'onfailure': onFailure
});
}
Run Code Online (Sandbox Code Playgroud) "普通"函数通常仅在给定类型的对象域上定义,但某些函数(如Scheme类型谓词list?或procedure?)是为任何类型的参数定义的,甚至可以应用于它们自身.因此,例如(list? procedure?)评估#f和(procedure? procedure?)评估#t.我试图找出如何编写这种完全定义的函数,但未能找到讨论这个的源.
例如,假设我们使用以下构造函数和选择器实现了计算机程序的结构和解释的练习2.4中描述的对数据类型:
(define (cons x y)
(lambda (m) (m x y)))
(define (car z)
(z (lambda (p q) p)))
(define (cdr z)
(z (lambda (p q) q)))
Run Code Online (Sandbox Code Playgroud)
那么我如何定义一个谓词pair?,该谓词返回#t任何使用构造的东西cons,以及#f任何不构造的东西?更一般地,怎么都类型谓词喜欢list?和procedure?实施?
我想在Haskell中实现一个对顺序不敏感的功能应用程序版本.通过一点背景:自然语言语义的一个突出传统(源自Richard Montague等)将各种类型的lambda函数指定为表达式的语义值(sv).句子的真值是通过对句子成分的sv进行功能性应用来计算的.举个简单的例子,考虑一下:
tl = [1..10]
bill :: Int
bill = 1
tall :: Int -> Bool
tall = \x -> x `elem` tl
Run Code Online (Sandbox Code Playgroud)
把"比尔很高"的句子想象成一棵树,左边的叶子被'比尔'占据,而右边的叶子被'高'占据.我们通过将右叶的sv应用于左叶的sv来计算句子的真值.现在考虑'有些男人很高':这里左边的叶子被"某个男人"占据[其中sv的类型为::(Int - > Bool) - > Bool]而右边的叶子被"高个子"占据[其sv的类型为::(Int - > Bool)].我们通过应用的SV计算句子的真值左叶到的SV 右叶.
因此,在这个系统中,给定一个左叶a和右叶b的树,我们首先检查哪个叶在另一个叶的域中,然后相应地应用功能应用:如果a在b的域中,我们做b (a),如果b在a的范围内,我们做(b).
我如何在Haskell中实现这种"顺序不敏感"的功能应用程序?我编写了一些函数,通过解析结果来确定哪个叶子在另一个域中
show (typeOf a)
Run Code Online (Sandbox Code Playgroud)
一片叶子 然而,这在我看来是不必要的麻烦.如果您尝试评估,Ghci会出错
bill tall
Run Code Online (Sandbox Code Playgroud)
因此,检查哪个项目在另一个域中的简单方法是尝试将一个项目应用于另一个项目,并查看是否出现错误/异常.那么我的问题是:如何捕获由类型不匹配导致的异常?也就是说,如何捕获此类非IO异常?
google-api ×1
google-oauth ×1
haskell ×1
oauth-2.0 ×1
predicate ×1
racket ×1
scheme ×1
types ×1