我有一个F#记录类型,并希望其中一个字段是可选的:
type legComponents = {
shares : int<share> ;
price : float<dollar / share> ;
totalInvestment : float<dollar> ;
}
type tradeLeg = {
id : int ;
tradeId : int ;
legActivity : LegActivityType ;
actedOn : DateTime ;
estimates : legComponents ;
?actuals : legComponents ;
}
Run Code Online (Sandbox Code Playgroud)
在tradeLeg类型中,我希望actuals字段是可选的.我似乎无法弄明白,也无法在网上找到可靠的例子.看起来这应该很容易
let ?t : int = None
Run Code Online (Sandbox Code Playgroud)
但我真的似乎无法让这个工作.呃 - 谢谢你
Ť
如何在使用MediaPlayer播放音频5毫秒后调用记录方法.我尝试了类似的东西,但我不知道,我没有找到任何好的例子来结束这个.
while(mp.isPlaying()){
if(record=0){
for(int i=0; i<5millisec; i++){ //how to define 5 millisec or is any better solution
}
startRecord();
record=1;
}
}
mp.stop();
mp.release();
mp=null;
Run Code Online (Sandbox Code Playgroud) 自iOS 7更新以来,录制应用程序发生了一些变化.我有一个应用程序曾经使用iOS 5和6,但当我尝试在iOS 7上运行它 - 录音没有响应.
我检查了互联网,看到有一种新方法需要调用.我试图将此代码放在viewDidAppear中:
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
if([[AVAudioSession sharedInstance] respondsToSelector:@selector(requestRecordPermission:)])
{
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
NSLog(@"permission : %d", granted);
}];
}
}
Run Code Online (Sandbox Code Playgroud)
'grant'总是1,虽然我没有授予任何权限,也没有看到任何请求弹出窗口.
顺便说一句,我正在尝试使用xcode 4.6.3来处理这个问题.我使用requestRecordPermission方法为AVAudioSession创建了一个类别,因为此方法仅在iOS 7中可用.
谢谢.
我刚刚开始使用 C# 9 和 .NET 5.0,特别是新record结构。我发现我有很多关于记录类型速记语法的优秀用例。
我考虑过的用例之一是对 ASP.NET Core 应用程序使用recorddto in IOptions<>,而不是常规类。这些选项类通常很简单,所以我认为它非常适合,但似乎我不能让它轻松工作,因为使用配置应用程序IOptions<>需要对象具有无参数构造函数。
public record MyOptions(string OptionA, int OptionB);
public class Startup
{
public void ConfigureServices(IServiceCollection services) {
services.Configure<MyOptions>(Configuration.GetSection(nameof(MyOptions)));
}
...
}
public class MyController : Controller
{
private readonly MyOptions _options;
public MyController(IOptions<MyOptions> options) {
_options = options.Value; // This throws an exception at runtime
}
}
Run Code Online (Sandbox Code Playgroud)
上面的示例在尝试访问该IOption<>.Value属性时抛出以下异常:
System.MissingMethodException: '没有为类型 'AcmeSolution.MyOptions' 定义无参数构造函数。
有没有办法配置IOptions配置系统以使用记录的构造函数反序列化选项,而不是需要无参数的构造函数?
我可以对记录使用普通语法,但是使用类确实没有任何好处。
为什么每次通话都要评估tb?有没有什么方法可以让它只评估一次?
type test =
{ a: float }
member x.b =
printfn "oh no"
x.a * 2.
let t = { a = 1. }
t.b
t.b
Run Code Online (Sandbox Code Playgroud) defrecord 在clojure中允许使用自定义字段定义简单数据容器.
例如
user=> (defrecord Book [author title ISBN])
user.Book
Run Code Online (Sandbox Code Playgroud)
结果的最小构造函数只接受位置参数而没有其他功能,例如字段默认,字段验证等.
user=> (Book. "J.R.R Tolkien" "The Lord of the Rings" 9780618517657)
#:user.Book{:author "J.R.R Tolkien", :title "The Lord of the Rings", :ISBN 9780618517657}
Run Code Online (Sandbox Code Playgroud)
编写包含默认构造函数的函数总是可以获得更复杂的构造语义 - 使用关键字参数,提供默认值等等.
这似乎是宏提供扩展语义的理想方案.人们为了更丰富的defrecord建设而编写和/或推荐了哪些宏?
鉴于:
data MyRecord a = MyRecord{list :: [a], other_fields :: Char, …}
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一个函数,它将一个新a的列表放入并返回一个新的MyRecord:
pushOntoList :: a -> MyRecord -> MyRecord
Run Code Online (Sandbox Code Playgroud)
问题:
有没有一种方法可以写出pushOntoList这样的方式,它不依赖于记录的其余部分,而只是简单地将其修改为未经修改?
问这个问题的另一种方法是你可以在pushOntoList不看清楚其余MyRecord定义的情况下编写吗?
我正在尝试使用graphviz来执行类似于UML类图的操作.
我想知道是否有一种方法可以使样式'register'的节点具有粗体字的第一个字段,使其与其他字段不同.
我的节点看起来像这样:
digraph i {
"node" [
label = "<f0> title | <f1> index | ... | <f2> field1 | <f3> field2"
shape = "record"
];
}
Run Code Online (Sandbox Code Playgroud)
我试过这个但它不起作用:(嵌入html)
digraph i {
"node" [
label = "<f0> <B>title</B> | <f1> index | ... | <f2> field1 | <f3> field2"
shape = "record"
];
}
Run Code Online (Sandbox Code Playgroud) 当涉及"涉及方法的记录"时,看起来Delphi编译器不支持const记录参数.
以前没试过滥用const约定,我有点惊讶地发现编译器接受了这样的代码:
type
TTest = record
Field : String;
procedure Update;
end;
procedure TTest.Update;
begin
Field := Field + '+1';
end;
procedure DoStuff(const t : TTest);
begin
ShowMessage(t.Field);
t.Update;
ShowMessage(t.Field);
end;
Run Code Online (Sandbox Code Playgroud)
虽然如果你尝试t.Field:='doh';在DoStuff中执行操作
,编译器会正确地抱怨,但是你可以调用修改"const"记录的方法,甚至没有提示或警告.因此,这与引用类型(例如类或动态数组)不同,其中允许直接字段写入(因为const仅限制对参数本身的更改).
附录:这允许以这种方式修改声明的编译时常量,如:
const
cTest : TTest = (Field : '1');
...
cTest.Update; // will show '1' then '1'+'1'
ShowMessage(cTest.Field); // will show '1' (because optimized at compile-time)
Run Code Online (Sandbox Code Playgroud)
这是接受/记录的行为吗?还是仅仅是编译器的缺点?
是否可以将对象函数作为参数传递给过程而不是传递整个对象?
我有一个记录定义,其函数定义为公共类参数,例如:
TMyRecord = record
public
class function New(const a, b: Integer): TMyRecord; static;
function GiveMeAValue(inputValue: integer): Single;
public
a, b: Integer;
end;
Run Code Online (Sandbox Code Playgroud)
该功能可能是这样的:
function TMyRecord.GiveMeAValue(inputValue: Integer): Single;
begin
RESULT := inputValue/(self.a + self.b);
end;
Run Code Online (Sandbox Code Playgroud)
然后我希望定义一个调用类函数的过程,GiveMeAValue但我不想将它传递给整个记录.我可以做这样的事情,例如:
Procedure DoSomething(var1: Single; var2, var3: Integer, ?TMyRecord.GiveMeAValue?);
begin
var1 = ?TMyRecord.GiveMeAValue?(var2 + var3);
//Do Some Other Stuff
end;
Run Code Online (Sandbox Code Playgroud)
如果是,那么我如何正确地将该函数作为过程参数传递?