在 Swift 中,我们有正常的默认类型
我们有弱类型
我们有无主打字
(因此:推论:唯一一次你可以使用“unowned”的情况是你“绝对知道”该对象永远不会变为 nil。)
现在:
在我看来,下面这句话,
绝对是真的......
我所说的绝对是指,真的,真的,绝对,深入到可能的最深层次的哲学问题真实...
因此逻辑推论:
{除此之外 - 我能想到的唯一其他区别是在 self 记录的意义上。如果我使用 unowned,它会提示我的开发人员了解某些事情;让我们暂时搁置这个问题。)
所以我的问题很直截了当,非常准确,非常具体:上面的粗体句子是“真实的”(在“完全、非常、壮观”的真实意义上是真实的)。
最佳答案
我同意 Yannick 的观点。你的大胆陈述是不正确的。无主引用必须在其生命周期内有效。在 -Ounchecked 程序中,未能保持此前提条件是未定义的行为。我不是说“它崩溃了”。我的意思是它不是一个结构良好的程序;它的作用是不确定的。弱引用不会由于其释放而产生未定义的行为,即使在 -Ounchecked 下也是如此。
使用 unowned 是程序员声明引用在其整个生命周期内都有效。这甚至不是 Type! 断言的东西。 ! 类型只是断言引用在访问时有效。这就是为什么不能在无主对象上测试 x == nil 的原因。它不是可选的。它不是“伪装的可选”(如 Type!)。它必须始终有效。
Unlike a weak reference, however, an unowned reference is used when the other instance has the same lifetime or a longer lifetime. ... An unowned reference is expected to always have a value. —— [The Swift Programming Language]
因此,对于您的“最深层次的哲学”,unowned 包含一个在 weak 中不存在的先决条件。这个前提条件存在于程序之外,必须由程序员而不是编译器来证明,以确保程序的格式正确。
至于是否有理由使用 unowned,如果我们采取绝对立场(如您的问题),那当然是有理由的。在已知前提条件为真的情况下,它是最严格的类型。 weak 是比 unowned 弱的类型;它表示更少的先决条件。好的类型理论鼓励我们尽可能使用最强的(最严格的;最少的合法值)类型,unowned 是比 weak 更强的类型。
在非绝对主义(“实用”)意义上,选择更强类型的结果是更简单的代码。当你使用 weak 时,你每次使用它时都必须不断地重新声明它不是 nil 的前提条件,并处理它所在的情况(可能插入 fatalError 只是用更多的工作 reshape 了 unowned)。使用 unowned 可让您断言此先决条件一次。这会创建更简单、更正确的代码。我从来没有使用 unowned 来提高速度。我一直用它来避免一遍又一遍地回答“但是如果它是零怎么办?”在代码中它绝不能为零。
关于 swift 。 unowned 相对于 weak 性能的(绝对)唯一特定优势是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41830631/
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?
我在Ruby程序中有两个URI。一个肯定是绝对URI,另一个可能是绝对URI或相对URI。我想在第一个的上下文中将第二个转换为绝对URI,所以如果第一个是http://pupeno.com/blog第二个是/about,结果应该是http://pupeno.com/about.有什么想法吗? 最佳答案 Ruby的内置URI和Addressablegem,做这个简短的工作。我更喜欢Addressable,因为它功能更全面,但URI是内置的。require'uri'URI.join('http://pupeno.com/blog','/
我想通过内部数组中的第一个元素从数组数组中找到唯一元素。例如a=[[1,2],[2,3],[1,5]我想要类似的东西[[1,2],[2,3]] 最佳答案 uniq方法需要一个block:uniq_a=a.uniq(&:first)或者如果您想就地进行:a.uniq!(&:first)例如:>>a=[[1,2],[2,3],[1,5]]=>[[1,2],[2,3],[1,5]]>>a.uniq(&:first)=>[[1,2],[2,3]]>>a=>[[1,2],[2,3],[1,5]]或者>>a=[[1,2],[2,3],[1,5]
给定一个包含各种语言字符的UTF-8文件,我如何计算它包含的唯一字符的数量,同时排除选定数量的符号(例如:“!”、“@”、"#",".")从这个算起? 最佳答案 这是一个bash解决方案。:)bash$perl-CSD-ne'BEGIN{$s{$_}++forsplit//,q(!@#.)}$s{$_}++||$c++forsplit//;END{print"$c\n"}'*.utf8 关于python-如何计算文件中唯一字符的数量?,我们在StackOverflow上找到一个类似的问题
如何以最佳方式在字符串中找到唯一元素?示例字符串格式为myString="34345667543"对/对['3','4','3','5'.....] 最佳答案 这是一个有趣的问题,因为它返回了很多几乎相似的结果,所以我做了一个简单的基准测试来决定哪个实际上是最好的解决方案:require'rubygems'require'benchmark'require'set'puts"Dothetest"Benchmark.bm(40)do|x|STRING_TEST="26263636362626218118181111232112233"
我爱Sanitize.这是一个了不起的实用程序。我遇到的唯一问题是,它需要永远准备一个开发环境,因为它使用Nokogiri,这对编译时间来说是一种痛苦。是否有任何程序可以在不使用Nokogiri的情况下执行Sanitize的操作(如果没有别的,只是温和地执行它的操作)?这将以指数方式提供帮助! 最佳答案 Rails有自己的SanitizeHelper。根据http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html,它将Thissanitizehe
我计划将STIinRails与以下模型一起使用:classPromoEvent和Discount在属性方面仅存在一些差异,因此我认为STI是一个不错的选择。我不确定如何确保,例如,仅Event具有额外的image_filename属性。我知道它会在promos表中,并且它必须是NULL-able以防我插入Discount行。如何确保Discount对象对image_filename属性一无所知(即未在Discount.column_names中列出>和/或无法设置它)Event知道它吗? 最佳答案 我认为这个概念是不同的,而你的Pr
操作系统:CentOS6.2x86_64很抱歉缩进太古怪了。这是我的第一篇SO帖子,我是新来设置服务器的。不过,我正在学习,并将详细说明我尝试解决此问题所采取的步骤以及寻求帮助的地方。我是一位有抱负的年轻Web开发人员,并且我在其他人配置的服务器上工作,因此,这对我来说是全新的。我正在准备我最近购买的用于运行Rails应用程序的linode。我遵循了此处http://blog.blenderbox.com/2011/01/07/installing-rvm-ruby-rails-passenger-nginx-on-centos/提供的初始安装指南,并更改了步骤:sudobash反射(
link有两个组件:componenta_id和componentb_id。为此,在Link模型文件中我有:belongs_to:componenta,class_name:"Component"belongs_to:componentb,class_name:"Component"validates:componenta_id,presence:truevalidates:componentb_id,presence:truevalidates:componenta_id,uniqueness:{scope::componentb_id}validates:componentb_id
出于某种原因,以下代码产生了一个具有重复值的集合。我不确定ruby中数组的唯一性是如何定义的,所以也许这在某种程度上是可以预料的?require'set'xs=[1,2,3]xss=Set.new[]xs.eachdo|x|xss.mergexss.to_a.map{|xs|xs.pushx}xss.add[x]pxssend将打印###怎么了?编辑将xs.pushx更改为xs+[x]将修复它。 最佳答案 您实际上是在更改集合中的对象,这是不允许的。来自documentation:Setassumesthattheidentit