注意:我要求的是现实世界的问题,而不是出于理论目的; 看到问题的最后部分 - 与浏览器完成工作的方式相同.
new java.net.URL(new java.net.URL(base_url),rel_url).toString
Run Code Online (Sandbox Code Playgroud)
(base_url和rel_url是String).在我的情况下,base_url是我获取的页面的URL,rel_url来自"<a href = ..."值,因此它甚至可能是单个"#"字符(例如).
但是这样的代码不适用于URL片段,例如这两个部分:
HTPP://www.hello.com/1.html
?p = 2时
我测试了Firefox,Chromium,Opera,Konqueror,"Web浏览器"(Gnome modesty ;-D) - 所有这些都将这些URL组合为:
HTPP://www.hello.com/1.html p = 2时
使用上面的代码我得到:
HTPP://www.hello.com/ p = 2时
如何以准备好的世界方式组合URL片段?
在我开始自己解析之前,我希望已经有了方便的库;-).
考虑这样的代码:
fun equals(a : 'a,b : 'a) =
a = b;
Run Code Online (Sandbox Code Playgroud)
我的代码更大,但这是问题所在.SML报告"错误:运算符和操作数不同意".
我是SML的初学者,我不知道为什么抱怨.这是否类似于C#问题,您无法真正比较任何类型的两个值,但您必须使用类型的默认相等比较器?我应该添加一些约束'a
(我希望我正确地写为通用类型)?
现在我知道存在这样的类型,我知道它们有哪些字段,但我找不到它们的定义.即我发现:
typedef __device_builtin__ struct uint2 uint2;
Run Code Online (Sandbox Code Playgroud)
但这留下了我完整的所有问题 - 他们的构造者呢?运营商怎么样?等等.
那么,那些类型的定义(真实的)是在某个地方发布的吗?我不想重新发明轮子,特别是没有优化(开始如何初始化这样的结构).
也许我错过了一些东西,但是我使用了data-*
属性,即data-content
使用"apple","cow"等条目.突然间,当我data-content
用字符串 "null" 设置我时,我被击中了(我使用Chromium HTML检查了:
<p class="text" data-content="null">null</p>
Run Code Online (Sandbox Code Playgroud)
但是当我data-content
使用jQuery 阅读时:
text_elem.data('content')
Run Code Online (Sandbox Code Playgroud)
我得到空值,而不是"null"字符串.
所以我的问题是,如何以原始形式阅读它,所以我可以像在HTML中一样获得"null"字符串?
当比较Go和Scala语句检测结束时,我发现Scala的规则更丰富,即:
除非满足下列条件之一,否则行结尾将被视为分号:
- 有问题的行以单词形式结束,作为语句的结尾不合法,例如句点或中缀运算符.
- 下一行以一个无法启动语句的单词开头.
- 该行在括号(...)或括号[...]内结束,因为它们无论如何都不能包含多个语句.
规则#1也是Go的工作原理.规则#3也是.唯一的区别是规则#2 - 它涉及单一前瞻,因为涉及一个令牌("单词").
问题 - 涉及什么样的性能损失:1%慢,5%,10%?
我很乐意看到评论(不是问题)Go设计师为什么会忽略这个规则 - 如果不是为了表现,它会使语言更可靠,例如在方法链中:
x = some_object.select(...)
.sort(...)
.reverse(...)
.where(...)
.single()
Run Code Online (Sandbox Code Playgroud)
如果我没有被误认为Go这是一个错误(你可以用两种可能的方式解决它 - 将括号中的整个语句或括号中的表达式,但它是手动调整),Scala将采取它应有的方式.
Kotlin有很多功能(?.
和!!.
)处理可空类型.但是这个只是让我感到震惊 - 如果你不知道你是在处理可空或不可空类型呢?如果你有泛型类MyClass<T>
,那么你只需要一些类型就可以了T
.
Kotlin是否允许将"可空"运算符应用于泛型类型(T
此处),类型是否可以在类(如T?
)中变为可空,以及如果类将使用可空类型实例化,如果类似MyClass<String?>
.它会**std::string
在MyClass
类型中导致可为空的可空(如指向C++中的指针 - )类型吗?
有关记录:类型的并集与交集,请参阅:TypeScript 中的高级类型
假设我有接口IA
和IB
. 创建这些参数的交集作为参数非常容易,而无需创建额外的接口。
void Foo<T>(T t) where T : IA, IB
Run Code Online (Sandbox Code Playgroud)
但是,当结果应该是类型的交集时,我看不到执行相同操作的明确方法。考虑提供商/工厂场景:
interface IProvider
{
T Provide();
}
Run Code Online (Sandbox Code Playgroud)
稍后消费者将获得该提供者:
void Consume(IProvider provider)
Run Code Online (Sandbox Code Playgroud)
问题是如何定义T
。如果我定义它使Provide
方法通用:
T Provide<T>() where ...
Run Code Online (Sandbox Code Playgroud)
这是没有意义的,因为这意味着消费者能够以某种方式告诉现有的提供者它提供什么类型。
如果我将整个提供程序定义为泛型类型:
interface IProvider<T> where ...
{
T Provide();
}
Run Code Online (Sandbox Code Playgroud)
它更有意义,但现在该方法也Consume
必须是通用的,并且需要为联合定义通用约束,开始“泄漏”很快使代码变得丑陋。
那么有没有一种方法可以干净、正确地表达它呢?就像输入交集时一样——简短、干净且正确。
更新:作为一种解决方法,我现在使用Intersection
提供类型检查的类型,但代价是额外的内存消耗。
假设你有:
class Foo
{
static string f = nameof(Foo);
}
Run Code Online (Sandbox Code Playgroud)
这可行,但我不喜欢在nameof
. 在实例上下文中,我可以使用this.GetType().Name
,但是如何在静态上下文中获取类型名称(无需像上面那样显式引用类型)?
这种问题的模式(最佳实践)是什么 - 修改集合中的元素(值)?
条件:
在C++中,它很简单,很好,我只是通过一个集合迭代并更改了元素.但是在C#中迭代(使用枚举器)是只读操作(就C++而言,只有const_iterator可用).
那么,如何在C#中做到这一点?
例如:具有"1,2,3,4"修饰的序列将其改变为"1,2,8,9"而不是"1,2,3"或"1,2,3,4,5".
假设我有功能:
def foo[A,B](a : A, f : A => B) = ...
Run Code Online (Sandbox Code Playgroud)
我称之为:
var x = new X()
foo(x, obj => ...
Run Code Online (Sandbox Code Playgroud)
此时很明显lambda(obj here)的参数类型是X(例如,C#以这种方式工作).
但是在Scala我必须写:
foo(x, (obj : X) => ...
Run Code Online (Sandbox Code Playgroud)
它会在代码中引起很多噪音.
如何编写我的函数foo以避免每次调用都出现过度规范?或者也许我错过了一些东西并且需要添加类型,因为这样的调用(没有类型信息)将是不明确的.
generics ×4
c# ×3
scala ×3
types ×3
attributes ×1
browser ×1
collections ×1
cuda ×1
enumerator ×1
go ×1
html5 ×1
iterator ×1
java ×1
javascript ×1
jquery ×1
kotlin ×1
nullable ×1
sml ×1
syntax ×1
url ×1