您可以在这里找到Tensorflow GitHub pr
https://github.com/tensor.com/tensorflow/tensorflow/addons/pull/2635/26355635/26355635/26355635
Wikipedia文章中的描述是错误的/误导性的。
“如果派生类实际上没有继承基类,则必须定义所有虚拟方法”仅当派生类获取 实例化 时才是正确的。单纯的声明,没有实例化,不需要定义纯虚拟方法。
Wikipedia文章的说法是“既然d不会继承b,c实际上,必须定义中的纯虚拟方法”是完全不正确的,并且以下编译没有任何问题,没有任何问题, > d 或 e
实例化纯虚拟方法:
#include <string>
#include <iostream>
class A {
protected:
std::string _msg;
public:
A(std::string x): _msg(x) {}
void test(){ std::cout<<"hello from A: "<<_msg <<"\n"; }
virtual void pure_virtual_test() = 0;
};
// since B,C inherit A virtually, the pure virtual method pure_virtual_test doesn't need to be defined
class B: virtual public A { public: B(std::string x):A("b"){} };
class C: virtual public A { public: C(std::string x):A("c"){} };
class D: public B,C {
public:
D(std::string x):A("d_a"),B("d_b"),C("d_c"){}
};
class E: public D {
public:
E(std::string x):A("e_a"),D("e_d"){}
};
int main()
{
return 0;
}
main
是空的, d
和 e
e 没有问题就声明了。现在,如果您尝试实例化一个或另一个,那么您将遇到问题。
从 country_code-&gt;具有
; formatting_function_name 表示您需要另一层将函数名称转换为函数调用。您可以避免这种情况,因为在Scala函数中是一流的实体,这意味着它们可以作为参数传递到其他函数,因为功能是对象。地图
一个简单的解决方案是根据格式函数的类型更改 MAP
值类型参数。我的意思是:
val funcMap: Map[String, String => String]
现在您可以为您的 country_code
使用:
indf.withcolumn("mapped_id", funcMap("country_code")("mapped_id"))
快速测试:
object Something extends App {
val Id = "someId"
val Au = "AU"
val Bh = "BH"
val Cn = "CN"
val In = "IN"
def function001(id: String): String = s"$id function001"
def function002(id: String): String = s"$id function002"
def function003(id: String): String = s"$id function003"
def function004(id: String): String = s"$id function004"
val funcMap = Map[String, String => String](
Au -> function001,
Bh -> function002,
Cn -> function003,
In -> function004
)
println(funcMap(Au)(Id))
}
输出:输出:
someId function001
要快捷操作(尤其是删除合并),您可以使用 groupy.transform
,它将保留原始索引:
df["what_i_want_2"] = (df["amount"] * df["con"]) / (
df.groupby("name")["amount"].transform("sum")
)
感谢Alex和Kroitor(在Github上)。
下面的代码应归功于KROOTOR(在GitHub上) https://github.com/github.com/ccxt/ccxt/问题/13806
import ccxt
# make sure your version is 1.51+
print('CCXT Version:', ccxt.__version__)
exchange = ccxt.ftx({
'apiKey': 'YOUR_API_KEY',
'secret': 'YOUR_SECRET',
# "headers": {
# "FTX-SUBACCOUNT": "YOUR_SUBACCOUNT"
# }
})
markets = exchange.load_markets ()
# exchange.verbose = True # uncomment for debugging
all_results = {}
symbol = None
since = None
limit = 200
end_time = exchange.milliseconds()
while True:
print('------------------------------------------------------------------')
params = {
'end_time': int(end_time / 1000),
}
results = exchange.fetch_deposits(symbol, since, limit, params)
if len(results):
first = results[0]
last = results[len(results) - 1]
end_time = first['timestamp']
print('Fetched', len(results), 'deposits from', first['datetime'], 'till', last['datetime'])
fetched_new_results = False
for result in results:
if result['id'] not in all_results:
fetched_new_results = True
all_results[result['id']] = result
if not fetched_new_results:
print('Done')
break
else:
print('Done')
break
all_results = list(all_results.values())
all_results = exchange.sort_by(all_results, 'timestamp')
print('Fetched', len(all_results), 'deposits')
for i in range(0, len(all_results)):
result = all_results[i]
print(i, result['id'], result['currency'], result['datetime'], result['amount'])
检查正确性的最简单方法是使用
https://chain.so/api/v2/get_address_received/coin_name/your_address
比较 escrenceed_received_value
与ftx返回的值
更新:我也找到了一个解决方案,即使没有优化。
String convertToJson(String str) {
str = str.toString().replaceAll('{', '{"');
str = str.toString().replaceAll(': ', '": "');
str = str.toString().replaceAll(', ', '", "');
str = str.toString().replaceAll('}', '"}');
return str;
}
tl; dr 您可以使用 stepverifier.withvirtualtime
来测试基于时间的操作员并避免长时间延迟。此外,由于流是无限的,因此您需要在某个时候使用 tancancel
取消订阅。
以下是一些示例
@Test
void testDelayElements() {
StepVerifier.withVirtualTime(() ->
Mono.just(1).repeat() // infinite Flux with backpressure
.delayElements(Duration.ofMillis(10000))
.concatMap(ignore -> doSomething())
)
.expectSubscription()
.expectNoEvent(Duration.ofMillis(10000))
.expectNextCount(1)
.expectNoEvent(Duration.ofMillis(10000))
.expectNextCount(1)
.expectNoEvent(Duration.ofMillis(10000))
.expectNextCount(1)
.thenCancel()
.verify();
}
以获取更多信息,请检查“ nofollow noreferrer”>操纵时间反应堆中的部分 3参考指南。
文档非常重要的一点
额外谨慎,以确保供应商&lt;出版商&gt;可以以懒惰的方式使用。否则,不能保证虚拟时间。特别是避免在测试代码早期实例化磁通,并让供应商返回该变量。相反,请始终实例化lambda内的通量。
请注意,发布者是使用供应商&lt; t&gt;&gt;
懒惰的。例如,以下内容将无法正常工作
@Test
void testDelayElements() {
var stream = Mono.just(1).repeat() // infinite Flux with backpressure
.delayElements(Duration.ofMillis(10000))
.concatMap(ignore -> doSomething());
StepVerifier.withVirtualTime(() -> stream)
....
}
由于您在评论中说明:
我的所有用法(如上所示)将是价值类型(int,float,主要是bool)
只需使用 struct
generic约束:
其中t:struct
- 类型参数必须是不可删除的值类型。有关无效价值类型的信息,请参见无效的值类型。因为所有值类型都有无访问的无参数构造函数,所以struct
约束意味着new()
约束,并且不能与new()约束。您不能将
struct
约束与约束。
结合起来。
public class Parameter<T> where T : struct {
public T Value { get; set;}
public T? Min { get; set; }
public void Set(T? value_)
{
}
}
哪个将允许 t?
解决到无效的值类型将制作 parameter.set(null);
有效。
您可以将DF1用作查找表:(
df2['Total'] = df2[df2['Class']=='A'].apply(
lambda x, **kwd: df1.set_index('Time').loc[kwd['tgt_time'],x['Item']]*x['Factor'],
axis=1, tgt_time='10:00')
Class Item Factor Total
0 A Apples 3 9.0
1 A Peaches 2 4.0
2 A Pears 5 25.0
3 B NaN 4 NaN
为了使这项工作我必须将列名从桃子更改为df1中的桃子)
调试Google Apps脚本Web应用程序在很大程度上取决于使用的Google Apps脚本功能,即使用模板HTML创建,如果客户端端与服务器端进行通信,等等。
当OP案例Case Google Apps脚本脚本执行日志中, '显示任何错误消息,很可能创建了 htmloutput
,并且应该可以在客户端上检查代码。
Google将插入iframe的iframe html/css/javaScript传递给HTMLService的IFRAME版本中的客户端A ife,即白色间距将不相同,不会在其他更改中包含评论。无论如何,您可以使用开发工具查看所得的JavaScript并从Dev Tools Console等调用JavaScript函数
。代码>在控制台下拉列表选择器上:
请记住,在Google Apps脚本项目上进行的更改不会保存。
值得一提的是,可以使用Google Apps脚本编辑器调试纯JavaScript。更简单的方法是将JavaScript代码放在.GS文件中,然后使用HTMLTemplate创建Web应用程序的 htmlOutput
对象将与: script> script> script> scriptsapp.getResource(name).getDataAsstring().getDataAsstring()< /代码>。另外,这种方法将有助于使用桌面工具测试JavaScript代码,这将有助于更轻松地修复由于缺失 /错误的
&lt;,&gt;,'',',',(,(,),(,),:
并利用.HTML文件中的JavaScript的IntelliSense
功能客户端JavaScript在 javascript.js.gs
文件中。 调用我们要调试的功能。
并
/**
* Respond to HTTP GET request. Returns a htmlOutput object.
*/
function doGet(e){
return HtmlService.createTemplateFromFile('index')
.evaluate()
.setTitle('My web app');
}
/**
* Returns the file content of a .gs or .html Google Apps Script file.
*
* @param {filename} Google Apps Script file name. It should not include the .gs or .html file extension
*/
function include(filename){
const [name, suffix] = filename.split('.');
switch(suffix){
default:
return HtmlService.createHtmlOutputFromFile(name).getContent();
case 'js':
const content = ScriptApp.getResource(name).getDataAsString();
return `<script>${content}</script>`;
}
}
设置了所需的参数,
<!DOCTYPE html>
<html>
<head>
<?!= include('stylesheet.css') ?>
</head>
<body>
<p>Add here some content</p>
<?!= include('javascript.js') ?>
</body>
</html>
它们
/**
* Arithmetic addition of two operands. Validates that both operands are JavaScript numbers.
*
* @param {number} a Left addition operand
* @param {number} a Right addition operand
*/
function addition(a,b){
if(typeof a !== 'number') || typeof b !== 'number') throw new Error('Operands should be numbers');
return a + b;
}
test.gs文件上有几个“测试”
/**
* Passing two numbers. Expected result: 2.
*/
function test_addition_01(){
const a = 1;
const b = 1;
const result = addition(a,b);
console.log(result === 2 ? 'PASS' : 'FAIL');
}
/**
* Passing one number and one string. Expected result: Custom error message.
*/
function test_addition_02(){
const a = 1;
const b = '1';
try{
const result = addition(a,b);
} catch(error) {
console.log(error.message === 'Operands should be numbers' ? 'PASS' : 'FAIL');
}
}
函数, getResource 即使在库中包括此方法
来调试使用其他技术的JavaScript,也 无法从库中提取文件主机或使用尝试...捕获并从服务器端拨打某些功能,Google.script.run,以记录执行日志上的错误。
要调试调用JavaScript库的JavaScript,您可以使用 urlfetchapp
和 est
(请参阅如何从外部源加载JavaScript并在Google Apps脚本中执行它)
您的客户端试图连接到端口
8000
时,您要公开端口6000
。更改端口设置。Your client tries to connect to a port
8000
while you are exposing port6000
. Change port settings.Connection RefusedErr无法建立连接