YAML有继承权.我见过的最明显的例子是:http://blog.101ideas.cz/posts/dry-your-yaml-files.html
我需要更复杂的东西:我需要覆盖对象的对象的属性.这是一个例子:
database: &default
server:
ip: 192.168.1.5
port: 2000
db_name: test
user:
name: root
password: root
# database foo differs from default by only its port and user password
foo_database:
<<: *default
server:
port: 2001
db_name: foo
user:
password: foo_root
Run Code Online (Sandbox Code Playgroud)
我想得到这个结果:
foo_database.server.ip -> 192.168.1.5
foo_database.server.port -> 2001
foo_database.db_name -> foo
foo_database.user.name -> root
foo_database.user.password -> foo_root
Run Code Online (Sandbox Code Playgroud)
但是,如果您这样声明,您将获得这些属性不正确(根据预期值):
foo_database.server.ip -> will be None
foo_database.user.name -> will be None
Run Code Online (Sandbox Code Playgroud)
因为新的"服务器"对象只有"port"属性,它会覆盖整个旧的"服务器"对象.
我如何获得我想要实现的继承?
我一直在尝试在Google应用程序脚本中使用oAuth来访问trello数据,但似乎OAuthService API对oAuth服务做了一些假设,并且trello不能以这种方式工作.
以下代码有效.它可以访问twitter(这是来自google的oauth教程):
function authorizeToTwitter() {
var oauthConfig = UrlFetchApp.addOAuthService("twitter");
oauthConfig.setAccessTokenUrl("https://api.twitter.com/oauth/access_token");
oauthConfig.setRequestTokenUrl("https://api.twitter.com/oauth/request_token");
oauthConfig.setAuthorizationUrl("https://api.twitter.com/oauth/authorize");
oauthConfig.setConsumerKey(<CONSUMER KEY>);
oauthConfig.setConsumerSecret(<CONSUMER SECRET>);
var requestData = {
"method": "GET",
"oAuthServiceName": "twitter",
"oAuthUseToken": "always"
};
var result = UrlFetchApp.fetch("https://api.twitter.com/1/statuses/mentions.json", requestData);
}
Run Code Online (Sandbox Code Playgroud)
以下代码将让我进入trello"按下确定后退"页面,但trello不知道如何重定向回来,所以我到了一个页面,要求我手动复制粘贴一个令牌(但谷歌没有为我提供了插入该令牌的方法
function authorizeToTrello() {
var oauthConfig = UrlFetchApp.addOAuthService("trello");
oauthConfig.setAccessTokenUrl("https://trello.com/1/OAuthGetAccessToken");
oauthConfig.setRequestTokenUrl("https://trello.com/1/OAuthGetRequestToken");
oauthConfig.setAuthorizationUrl("https://trello.com/1/OAuthAuthorizeToken");
oauthConfig.setConsumerKey(<CONSUMER KEY>);
oauthConfig.setConsumerSecret(<CONSUMER SECRET>);
var requestData = {
"method": "GET",
"oAuthServiceName": "trello",
"oAuthUseToken": "always"
};
var result = UrlFetchApp.fetch(
"https://api.trello.com/1/members/me/boards",
requestData);
}
Run Code Online (Sandbox Code Playgroud)
我尝试通过手动添加我在授权URL中提供给twitter的重定向回调来解决这个问题
oauthConfig.setAuthorizationUrl("https://trello.com/1/OAuthAuthorizeToken?return_url=https://docs.google.com/macros"); //this is what the tutorial says I should provide …Run Code Online (Sandbox Code Playgroud) 昨天我写了下面的c#代码(为了易读性而缩短了一点):
var timeObjects = ( from obj in someList
where ( obj.StartTime != null )
select new MyObject()
{
StartTime= obj.StartTime.Value,
EndTime = obj.EndTime
} )
Run Code Online (Sandbox Code Playgroud)
因此每个项目都有一个startTime,有些项目有一个EndTime(其他项目有null作为EndTime).
如果已知start和endtime,我想计算经过的时间:
foreach ( var item in timeObjects)
{
if ( item.EndTime == null )
{
item.elapsed = 0;
}
else
{
item.elapsed = ( item.EndTime.Value - item.StartTime).Minutes;
}
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用!timeObjects集合永远不会改变.
如果我说:
var timeObjects = ( from obj in someList
where ( obj.StartTime != null )
select new MyObject()
{
StartTime= obj.StartTime.Value,
EndTime = …Run Code Online (Sandbox Code Playgroud)