精华内容
下载资源
问答
  • 在Ruby中,一些方法有一个问号( ? ),问一个include?这样的问题include? 询问是否包含有问题的对象,然后返回true / false。 但为什么有些方法会有感叹号

    Ruby中,一些方法有一个问号( ? ),问一个像include?这样的问题include? 询问是否包含有问题的对象,然后返回true / false。

    但为什么有些方法会有感叹号( ! )而其他方法却没有?

    这是什么意思?


    #1楼

    简单说明:

    foo = "BEST DAY EVER" #assign a string to variable foo.
    
    => foo.downcase #call method downcase, this is without any exclamation.
    
    "best day ever"  #returns the result in downcase, but no change in value of foo.
    
    => foo #call the variable foo now.
    
    "BEST DAY EVER" #variable is unchanged.
    
    => foo.downcase! #call destructive version.
    
    => foo #call the variable foo now.
    
    "best day ever" #variable has been mutated in place.
    

    但是,如果你曾经称过一种方法downcase! 在上面的解释中, foo将永久改为downcase。 downcase! 不会返回一个新的字符串对象,而是替换该字符串,完全将foo更改为downcase。 我建议你不要使用downcase! 除非是完全必要的。


    #2楼

    最准确的说方法是用Bang! 是更危险或更令人惊讶的版本。 有许多方法可以在没有Bang的情况下进行变异,例如.destroy并且通常方法只有在核心库中存在更安全的替代方法的爆炸。

    例如,在Array上我们有.compact.compact! ,两种方法都会改变数组,但是.compact! 如果数组中没有nil,则返回nil而不是self,这比返回self更令人惊讶。

    我发现爆炸的唯一非变异方法是Kernel.exit! 这比.exit更令人惊讶,因为在进程关闭时你无法捕获SystemExit

    Rails和ActiveRecord延续了这一趋势,因为它使用了更多“令人惊讶”的效果,例如.create! 这会在失败时引发错误。


    #3楼

    底线: ! 方法只是改变它们被调用的对象的值,而没有方法! 返回一个被操纵的值,而无需写入调用该方法的对象。

    只用! 如果您不打算需要存储在您调用方法的变量上的原始值。

    我喜欢做类似的事情:

    foo = "word"
    bar = foo.capitalize
    puts bar
    

    要么

    foo = "word"
    puts foo.capitalize
    

    代替

    foo = "word"
    foo.capitalize!
    puts foo
    

    以防我想再次访问原始值。


    #4楼

    !
    

    我认为这是一个爆炸性的变化,它会摧毁它之前的一切。 Bang或感叹号表示您在代码中进行了永久保存的更改。

    如果你使用Ruby的方法进行全局替换gsub! 你做的替换是永久性的。

    您可以想象的另一种方法是打开文本文件并进行查找和替换,然后保存。 ! 在你的代码中做同样的事情。

    如果你来自bash世界,另一个有用的提示是sed -i具有类似的效果,可以永久保存更改。


    #5楼

    被称为“破坏性方法”他们倾向于更改您所指对象的原始副本。

    numbers=[1,0,10,5,8]
    numbers.collect{|n| puts n*2} # would multiply each number by two
    numbers #returns the same original copy
    numbers.collect!{|n| puts n*2} # would multiply each number by two and destructs the original copy from the array
    numbers   # returns [nil,nil,nil,nil,nil]
    

    #6楼

    一般来说,方法结束! 表明该方法将修改它所调用的对象 。 Ruby将这些称为“ 危险方法 ”,因为它们改变了其他人可能引用的状态。 这是一个简单的字符串示例:

    foo = "A STRING"  # a string called foo
    foo.downcase!     # modifies foo itself
    puts foo          # prints modified foo
    

    这将输出:

    a string
    

    在标准库中,有很多地方你会看到一对类似命名的方法,一个用! 一个没有。 没有的那些被称为“安全方法”,并且它们返回原始的副本 ,其中应用于副本的更改,被调用者不变。 这是没有的相同例子!

    foo = "A STRING"    # a string called foo
    bar = foo.downcase  # doesn't modify foo; returns a modified string
    puts foo            # prints unchanged foo
    puts bar            # prints newly created bar
    

    这输出:

    A STRING
    a string
    

    请记住,这只是一个约定,但很多Ruby类都遵循它。 它还可以帮助您跟踪代码中修改的内容。


    #7楼

    ! 通常意味着该方法作用于对象而不是返回结果。 从Ruby编程

    “危险”或修改接收器的方法可能以尾随“!”命名。


    #8楼

    这个命名约定取自Scheme

    1.3.5命名约定

    按照惯例,总是返回布尔值的过程名称通常以“?”结尾。 这样的过程称为谓词。

    按照惯例,将值存储到先前分配的位置(参见3.4节)的过程名称通常以“!”结尾。 这种程序称为变异程序。 按照惯例,突变过程返回的值未指定。


    #9楼

    感叹号意味着许多事情,除了“这是危险的,要小心”之外,有时你不能从中得到很多。

    正如其他人所说,在标准方法中,它通常用于表示一种方法,该方法会导致对象自身变异,但并非总是如此。 请注意,许多标准方法更改其接收器并且没有感叹号( popshiftclear ),并且某些带感叹号的方法不会更改其接收器( exit! )。 例如,请参阅此文章

    其他库可能使用不同的方式。 在Rails中,感叹号通常意味着该方法将在失败时抛出异常而不是静默失败。

    这是一个命名惯例,但许多人以微妙的方式使用它。 在你自己的代码中,一个好的经验法则就是在方法执行“危险”操作时使用它,特别是当存在两个具有相同名称的方法时,其中一个方法比另一个方法更“危险”。 “危险”几乎可以表示任何意义。


    #10楼

    来自themomorohoax.com:

    根据我的个人喜好,可以按照以下方式使用爆炸。

    1)如果方法没有按照预期的方式执行,则活动记录方法会引发错误。

    2)活动记录方法保存记录或方法保存对象(例如条带!)

    3)一种方法可以做一些“额外”的事情,比如发布到某个地方,或做一些动作。

    重点是:当你真正考虑是否有必要时,只使用一声巨响,以免其他开发人员烦恼,不得不检查你使用爆炸的原因。

    爆炸为其他开发者提供了两个线索。

    1)调用方法后没有必要保存对象。

    2)当你调用方法时,db将被更改。

    http://www.themomorohoax.com/2009/02/11/when-to-use-a-bang-exclamation-point-after-rails-methods

    展开全文
  • js 前加分号和感叹号什么意思?

    千次阅读 2015-11-25 17:19:23
    在函数声明【 function (){} 】后面加【 () 】,意思是执行这个函数...一般,成为表达式的最容易理解方式是:在左右两端加一个圆括号,这样【 (function (){}) 】。所以,立即执行函数最常见的写法是【 (function

    在函数声明【 function (){} 】后面加【 () 】,意思是执行这个函数声明。

    有的叫法是“匿名自动执行函数”,更准确的表示应该为“立即执行函数”。
     
    但立即执行函数,要作为表达式的一部分才行,不然js解释器会报语法错误。

    一般,成为表达式的最容易理解方式是:在左右两端加一个圆括号,像这样【 (function (){}) 】。

    所以,立即执行函数最常见的写法是【 (function (){})() 】,这是一个语句,在前面和后面都可以加【 ; 】。
     
    其实立即执行函数还有N种写法,

    比如【 (function (){}) 】也行,

    在函数声明前加一元运算符也行:

    【 !function (){}() 】、【 ~function (){}() 】。

    甚至,对一元运算符进行组合也可以:

    【 !!!!function (){}() 】、【 ~~~function (){}() 】、【 !~!function (){}() 】。

    展开全文
  • 在.Net 源码中看到这四种感叹号操作符的用法,感觉有点 ?. 和 ?? 操作符,请问它们起到什么作用呢?谢谢 ```csharp public static IWebHost Start(RequestDelegate app) =>Start(url: null!, app: app); var ...
  • 红色感叹号:自从上次update以后,修改过 蓝色的十字符号:server上有的文件,但是你的文件夹删除了 此外,你用的应该是某种gui软件,svn本身是命令行,就dos一样 红叉是服务器上已删除的文件,但你的目录里面...

    在这里插入图片描述svn add PATH…
    加文件或者文件夹

    问号:server上没有的文件

    绿色对号:上次update后没有修改的文件、文件夹

    红色感叹号:自从上次update以后,修改过

    蓝色的十字符号:server上有的文件,但是你的文件夹删除了

    此外,你用的应该是某种gui软件,svn本身是命令行,就像dos一样

    红叉是服务器上已删除的文件,但你的目录里面还有。
    参考博客:
    https://blog.csdn.net/chinajobs/article/details/46655583

    展开全文
  • 、~、+、搞不懂到底有什么用?不知各位有没有产生过这种疑惑。 那么现在我就用一句话概括一下这些看似无用的符号所起到的作用。 !、+、-、||、&&等这些东西的存在是为了告诉解析器,要把下面的代码当作表达式执行...

    有时候看一些jQuery插件的代码前面总是会有一些特殊的字符放在最前面,比如!、~、+、搞不懂到底有什么用?不知各位有没有产生过这种疑惑。

    那么现在我就用一句话概括一下这些看似无用的符号所起到的作用。

    像!、+、-、||、&&等这些东西的存在是为了告诉解析器,要把下面的代码当作表达式执行,而不是函数!更直白的说就是告诉浏览器,下面这个没名字(匿名)的函数要当作匿名函数(或者说是立即执行函数)来解析。

    一句话说完了,没看明白?那我就来按照这句话中的关键字简要的解释一下这句话的意思吧。

    一、这句话的上下文

    !、+、-、||、&&等符号的后面都是跟着一个function关键字的,他的结构就如下面的代码定义方式:

    +function ($) {
        //code
    }();

    二、解析器‘优待’函数申明

    浏览器在解析js代码的过程中涉及到一个扫描‘预编译’的过程(PS:不知道这么说合理否,毕竟js是解释型语言,和java这种编译语言处理过程是有差异的),这个过程中会有以下两个操作:①用var声明的变量设置为活动对象的属性,默认值为“undefined”,②以function定义的函数也添加为活动对象的属性,而且他们的值正是函数的定义;

    与本文密切相关的第二步,function申明的函数将‘优先’处理。而用var 定义的函数表达式则被浏览器视为普通表达式,在解析器顺序执行js代码的时候才给这个定义的函数名设值。

    这段话的代码解释:

    函数申明方式:

    var a = beloved();
    console.log(a);
    
    function beloved() {
        return 'ok';
    };
    

    函数表达式方式:

    var b = notgood();
    console.log(b);
    var notgood = function () {
        return 'bad';
    }
    

    执行结果:‘



    三、浏览器不喜欢没名字的‘孩子’

    第二部分我们已经说明了js代码的执行顺序,但是我们发现,不管是在“预编译”的时候执行,还是在正式解析的时候执行,只要按照正常的函数结构来定义函数,都能被浏览器识别,但是可能是“计划生育”的原因,有些是js代码“超育超生”,没法给函数这个“函数小朋友”上户口(匿名函数),就像这样:

    function () {
        alert('i have noting,even a name.')
    }
    

    执行结果:


    但是又想让他在这个特殊的空间里“施展拳脚”,怎么办?“人怕出名猪怕壮”,我们偷偷的把他打扮一下,搞成个普通的不能在普通的“小朋友”,而不要像function那样被“优待”不就行了?!

    (function () {
        console.log('i have noting,but i  can run now.')
    }());
    
    执行结果:


    就是这样的包装,这个没有名字的“小朋友”,在今后的岁月中在闭包、模块编程方面做出了“杰出贡献”。

     

    四、喜欢怎么写就怎么写

    前三部分用了一些 不太恰当的例子讲了两个基础的知识,下面就切入正题,先看代码:

    function () {
        console.log('are you ok!!!')
    }();
    

    执行结果:


    (function () {
        console.log('i am very ok!!!')
    }())
    
    !function () {
        console.log('i am very ok!!!')
    }();
    ~function () {
        console.log('i am very ok!!!')
    }();
    +function () {
        console.log('i am very ok!!!')
    }();
    true&&function () {
        console.log('i am very ok!!!')
    }();
    
    执行结果:

    看了代码,估计大家都已经最开始那句话解释的意思了把,不明白那就在罗嗦一遍,这些符号的存在,就是告诉浏览器,“我是一个普通通的表达式,请你在正式执行的时候再解析我,而不是在预编的时候!”,符号就是在帮助匿名函数做“伪装”!好啦,要说的东西解释完毕!

    其实匿名函数(立即执行函数)的写法是很随意的,你可以用任何自己习惯的写法来书写代码,也可以使用new关键字,像这样:

    0, function () { /* code */ }();
    new  function() { /* code */ }() 
    

    五、这个东西不一样

    都介绍完了还有什么?这个不可缺少的东西就是分号(;)!!!

        这个东西为啥不一样?先看代码:

    情况一:


    情况二:

    //    a.js
        function purpose() {
           console.log('i come from a.js')
        };
    
        purpose()
    //            忘记加分号了
    
    //b.js
        (function sayok() {
            console.log('b.js')
        }());
    

    执行结果:



    //    a.js
        function purpose() {
           console.log('i come from a.js')
        };
    
        purpose()
    //            忘记加分号了
    
    //b.js
        ;(function sayok() {
            console.log('b.js')
        }());
    

    执行结果:


    首先:我们可以发现,分号(;)是不可以放在立即执行函数前面的,它不具有转换function函数为表达式的功能,反而会告诉浏览器,“你看,就是家伙没户口”。再次:当我们在压缩合并同事间合作完成的代码时,就会出现第一种错误,由于别人漏泄了分号,自己的代码跑不转了,说不定你还要找好久出现的问题到底在哪。其实就是这个看着不起眼的分号。希望这个小tips能够帮助大家,在书写规范代码的问题上与君共勉。


    因个人水品有限,总结的知识如果存在错误或者漏洞,请指出,感谢!





    展开全文
  • 感叹号:自从上次update以后,修改过 蓝色的十字符号:server上有的文件,但是你的文件夹删除了 此外,你用的应该是某种gui软件,svn本身是命令行,就dos一样 红叉是服务器上已删除的文件,但
  • 打印机无端端用不了,黄色感叹号

    万次阅读 2013-07-20 23:44:00
    3 打开设备和打印机,看到USB Printer有个黄色感叹号 4 在word中点打印没有任何反应,不报错,也不打印 5 拔掉usb线,在"设备和打印机"里的打印机会消失,插上又出现了 故障排除 省略一万字,
  • 在使用jquery插件contextMenu的时候,我希望可以动态改变菜单项的禁用启用状态,以下是原文地址http://www.hangge.com/blog/cache/detail_1833.html ...是什么意思,感叹号加一个方法,不是很懂 希望大家不吝赐教!
  • 梦回类似第一份工作的地方,董事长在1个不热情的hr背后说, 一副奴隶命却没有奴隶相! 于是感叹到,要么奴隶命,要么技术命。终究是金钱的奴隶,欲望的奴隶! 为什么这么是哲学家! ...
  • ——单精度浮点数1个感叹号,所以是单精度。 #——双精度浮点数二横二竖,所以是双精度。 $——字符串型 外形极了S,所以是String,文字型么 &——长整型 外形L的花体字,所以是Long,长整型么。 @——货币...
  • dns_sd.jar缺失

    2018-11-28 17:14:02
    笔者今天就遇到了,往常一样,进过那爬虫爬不到的网络之后,神奇的一件事就发生了,打开eclipse的一瞬间,所有的项目都有了感叹号,报的dns_sd.jar缺失。没办法只能缺什么什么,所以解决方案就是下载dns_sd.jar...
  • /bin/bash (井号后面有感叹号)虽然看起来注释,但其实它是幻数,表示在什么环境下执行,若是在bash shell下没什么用,但是在csh等其他环境下可能会出现错误无法执行的情况,所以写#!/bin/bash是养成写脚本好...
  • 某天打开eclipse,突然发现很多工程前面多了个红色的感叹号!问题到底是什么?打开里面的源码文件,发现很多基础类都被标出了错误标识,纳尼!这什么鬼,第一反应当然是编译环境配置的有问题,应该是jre的问题。于是...
  • 2021-02-11

    2021-02-11 16:15:09
    我尝试用command+option+R进入恢复模式,结果到最后那个地球上面出现一个感叹号,下面还有文字(但具体内容我记不得了,如果你需要知道文字是什么,回邮件告诉我,我再进去一次看一下是什么然后用邮件发给你) ...
  • UI界面的xml文件不能正常预览

    千次阅读 2018-08-22 16:08:22
    可实际上明明在xml里面写东西了,就是不显示,这时候看右上角原本灰色的感叹号变成了红色 点击下面就会弹出提示,提示的内容是AppCompat ActionBar发生了未知错误,然后点击 refresh也是不好使啊,怎么办呢? 到...
  • 经常会发现将自己的电脑带到不同的地方后连接附近WIFI失败的现象,这是什么原因造成的了,觉得明明之前还有连过这个无线,密码都是正确的,无线连接的图标显示一个大大大的感叹号下面一样。其实这是因为你的...
  • svn中遇到的一些问题

    2013-10-13 21:29:45
    然后用vs2010打开最近在做的一个项目,不知道怎么回事这个工程就被自动的设置为respository,里面就有绿色的勾和红色的感叹号什么的,就是用客服端建的respository一样(刚开始不懂,)想把这个工程导入到服务器,...
  • 1.用网线接入校园网,登陆后几分钟自动掉线,并且桌面右下网络图标出现感叹号。但是,网络连接中,有线网适配器显示正常。 2.对以太网连接进行诊断,发现问题为:默认网关不可用;以及一个Internet连接问题(看上去...
  • 2019-10-07 02:31:07
    这是我\(11\)月\(1\)多校连测放在题面里的苏轼的一句诗,那个时候我就开始感叹时光易逝了。作为一名\(OIer\),我倒是的的确确不个\(OIer\)。从初二到\(NOIP2018\)一直在摸鱼,也没认真搞过啥子东西。兴趣很杂...
  • 机器人》《机器管家》《终结者》《霹雳5》中那些超智能的机器人;也有可能是《复仇者联盟》中“星期五”、“贾维斯”那样的超级计算机。超酷炫、超便捷,简直难以想象……这可能就是我们在电影中看到人工智能之后...
  • 点开《控制面板》,点《系统》,再点《硬件》,点《设备管理器》,把里面有问号和感叹号的项 目全部卸载,点确定关了《系统》项目。 取出你随机带得驱动程序盘,放入光驱里;再点控制面板里面的《添加硬件》,...
  • windows 程序设计

    2011-07-24 21:16:30
    因为这些窗口看起来有些桌面上的纸(当然,这是计算机还未占据办公桌之前的年代),Windows有时被称作:一个显示多个程序的「具象化桌面」。 Windows的早期版本使用一种「非优先权式(non-preemptive)」的多任务...

空空如也

空空如也

1 2
收藏数 28
精华内容 11
关键字:

感叹号像什么