使文本斜体的正确方法是什么?我见过以下四种方法:
<i>Italic Text</i>
<em>Italic Text</em>
<span class="italic">Italic Text</span>
<span class="footnote">Italic Text</span>
Run Code Online (Sandbox Code Playgroud)
<i>这是"老路".<i>没有语义意义,只传达了使文本斜体的表现效果.据我所知,这显然是错误的,因为这是非语义的.
<em>这使用语义标记纯粹用于表示目的.它恰好发生<em>在默认情况下以斜体呈现文本,因此经常被那些<i>应该避免但不知道其语义含义的人使用.并非所有斜体文本都是斜体,因为它是强调的.有时,它可能正好相反,如旁注或耳语.
<span class="italic">这使用CSS类来放置演示文稿.这通常被吹捧为正确的方式,但同样,这对我来说似乎是错误的.这似乎没有传达任何更多的语义含义<i>.但是,它的支持者会哭,如果你想要大胆地改变你所有的斜体文字会更容易.然而事实并非如此,因为我会留下一个名为"italic"的类,它使文本变为粗体.此外,我不清楚为什么我想要改变我网站上的所有斜体文字,或者至少我们可以想到这些不可取或不必要的情况.
<span class="footnote">这使用CSS类进行语义.到目前为止,这似乎是最好的方式,但它实际上有两个问题.
并非所有文本都具有足以保证语义标记的含义.例如,页面底部的斜体文字真的是一个注脚吗?还是它放在一边?或完全不同的东西.也许它没有特殊的意义,只需要用斜体表示,以便将它与其前面的文本分开.
当语义没有足够的强度时,它就会发生变化.让我说我的"脚注"仅仅基于页面底部的文字.几个月后我想在底部添加更多文字会发生什么?它不再是一个脚注.我们如何选择一个不太通用<em>但又避免这些问题的语义类?
似乎在许多情况下,语义的要求似乎过于繁琐,在这种情况下,制作斜体的愿望并不意味着具有语义含义.
此外,将风格与结构分开的愿望使得CSS被吹捧为<i>当有时候实际上不那么有用时的替代品.所以这让我回到了简陋的<i>标签,并想知道这一思路是否是它留在HTML5规范中的原因?
是否有关于此主题的任何好的博客文章或文章?也许那些参与决定保留/创建<i>标签的人?
我想学习如何写一个词法分析器.我的大学课程有一个任务,我们必须编写一个解析器(和一个词法分析器一起使用),但这是给我们的,没有任何指示或反馈(超出标记),所以我并没有真正从中学到很多东西.
在搜索了这个主题之后,我只能找到相当高级的写作,这些写作集中在我觉得比我所处的位置提前几步的区域.我想讨论为一种非常简单的语言编写词法分析器的基础知识,我可以将其作为研究更复杂语言标记的基础.
在这个阶段,我并不是对最佳实践或优化技术感兴趣,而是更喜欢专注于基本要素.有什么好的资源让我入门?
我很擅长处理比特,并且在编译时遇到以下警告:
Run Code Online (Sandbox Code Playgroud)7: warning: left shift count >= width of type
我的第7行看起来像这样
unsigned long int x = 1 << 32;
Run Code Online (Sandbox Code Playgroud)
如果long我的系统的大小是32位,这将是有意义的.但是,sizeof(long)返回8并CHAR_BIT定义为8建议long应为8x8 = 64位长.
我在这里错过了什么?是sizeof和CHAR_BIT不准确还是我误解了一些基本的东西?
Rails 3.1引入了一种通过引入清单文件来组织JS和CSS的新方法.例如,application.js可能看起来像这样:
//= require jquery
//= require jquery-ui
//= require jquery_ujs
//= require_tree .
Run Code Online (Sandbox Code Playgroud)
这将抓取Jquery的各个部分,所有自己的JS,将它们连接在一起并将其作为单个文件提供给客户端.很简单.
不幸的是,SASS对我来说并不是那么清楚.SASS已经内置了使用的连接@import.
我应该将所有部分文件更改为完整的SASS文件,然后使用清单文件连接它们还是继续使用@import?为什么?
在Github上设置回购后,似乎有两种方法可以将该回购转换为本地回购.
首先,我可以创建一个目录,初始化一个空白仓库,添加一个遥控器,然后从遥控器中提取更改.
> mkdir "exampleProject"
> cd "exampleProject"
> git init
> git remote add origin git@github.com:exampleUser/exampleProject.git
> git pull origin master
Run Code Online (Sandbox Code Playgroud)
其次,我可以克隆遥控器.
> git clone git@github.com:exampleUser/exampleProject.git
Run Code Online (Sandbox Code Playgroud)
克隆只是上述5步版本的快捷方式,还是做其他任何事情?如果我使用一种方法而不是另一种方法,我会遇到困难吗?
为构造函数和类和仅包含单个类的文件一致地编写注释块的最有用/最标准/最不令人惊讶的方法是什么?
然后文件本身?如果它只包含一个类,是否需要注释块?应该去哪些细节?
我想尽量避免在类,构造函数和文件注释块之间重复.
首先,我想将此问题仅限于Web开发.因此,只要语言用于Web开发,这就是语言无关的.就个人而言,我是从PHP的背景来看这个.
通常我们需要使用来自多个范围的对象.例如,我们可能需要在正常范围内使用数据库类,但也需要在控制器类中使用.如果我们在正常范围内创建数据库对象,那么我们无法从控制器类内部访问它.我们希望避免在不同的范围内创建两个数据库对象,因此无论范围如何,都需要一种重用数据库类的方法.为此,我们有两种选择:
当许多类涉及许多不同范围内的所有要求对象时,问题变得更加复杂.在这两种解决方案中,这都成了问题,因为如果我们将每个对象都设置为全局,那么我们就会在全局范围内输入太多噪声,如果我们将太多参数传递给类,则该类变得更难以管理.
因此,在这两种情况下,您经常会看到使用注册表.在全局情况下,我们有一个全局的注册表对象,然后将所有对象和变量添加到任何对象中,但只将一个变量(注册表)放入全局范围.在DI情况下,我们将注册表对象传递给每个类,将参数数量减少到1.
就个人而言,我使用后一种方法,因为许多文章主张使用全局变量,但我遇到了两个问题.首先,注册表类将包含大量的递归.例如,注册表类将包含数据库类所需的数据库登录变量.因此,我们需要将注册表类注入数据库.但是,许多其他类将需要该数据库,因此需要将数据库添加到注册表中,创建一个循环.现代语言可以处理这个问题还是会导致巨大的性能问题?请注意,全局注册表不会受此影响,因为它没有传递给任何东西.
其次,我将开始将大量数据传递给不需要它的对象.我的数据库不关心我的路由器,但路由器将与数据库连接详细信息一起传递到数据库.这通过递归问题变得更糟,因为如果路由器具有注册表,则注册表具有数据库和注册表并且注册表被传递到数据库,然后数据库通过路由器传递给自己(即我可以$this->registry->router->registry->database从在数据库类里面`).
此外,除了更复杂之外,我没有看到DI给了我什么.我必须将一个额外的变量传递给每个对象,我必须使用注册表对象$this->registry->object->method()而不是$registry->object->method().现在这显然不是一个大问题,但如果它没有给我任何关于全球方法的东西,它似乎是不必要的.
显然,当我在没有注册表的情况下使用DI时,这些问题不存在,但是我必须"手动"传递每个对象,导致类构造函数具有荒谬的参数数量.
鉴于这两个版本的DI存在这些问题,是不是全球注册表优越?通过在DI上使用全球注册表,我失去了什么?
在讨论DI vs Globals时经常提到的一件事是全局变量会抑制你正确测试程序的能力.全局变量究竟是如何阻止我测试DI不会的程序?我在很多地方都读到这是因为全局可以从任何地方改变,因此难以模仿.但是,在我看来,至少在PHP中,对象是通过引用传递的,更改某个类中的注入对象也会在注入它的任何其他类中更改它.
如果我创建一个表rails generate migration,我可以稍后通过创建一个新的迁移添加一个额外的列.我还可以回滚原始迁移,然后编辑它以包含额外列.
//Create the model including the migration
$ rails generate model Foo bar:string
//Perform the migration
$ rake db:migrate
//Create the add column migration
$ rails generate migration add_foobar_to_foos foobar:string
//Perform the new migration
$ rake db:migrate
Run Code Online (Sandbox Code Playgroud)
//Create the model including the migration
$ rails generate model Foo bar:string
//Perform the migration
$ rake db:migrate
//Rollback the migration
$ rake db:rollback
//Edit the original migration file
//Perform the new migration
$ rake db:migrate
Run Code Online (Sandbox Code Playgroud)
完成此任务的正确/最佳方法是什么?为什么?
我刚开始使用Git并发现当我在分支中实现一个功能时,我会遇到一些真正需要尽快推送到主干的bug.为了做到这一点,我使用checkout切换回trunk,进行更改并提交它们.我现在有一个没有bug的主干.
不幸的是,我的分支也需要修复此错误.由于功能不完整,我不能将分支合并回主干.如何更改我的分支以便它接收我对主干所做的更改?
如果重要的话,我正在自行开发,因此只需要担心一个存储库.
我正在使用TortoiseGit,因此特定于此的说明将有所帮助,但不是必需的.
根据文档,fprintf可能会失败,并会在失败时返回负数.显然有很多情况下检查这个值是有用的.
但是,我通常使用fprintf将错误消息打印到stderr.我的代码通常看起来像这样:
rc = foo();
if(rc) {
fprintf(stderr, "An error occured\n");
//Sometimes stuff will need to be cleaned up here
return 1;
}
Run Code Online (Sandbox Code Playgroud)
在这些情况下,fprintf仍然可能失败吗?如果是这样,有什么方法可以用来以某种方式显示错误消息,或者是否有更可靠的替代fprintf?
如果没有,是否需要检查fprintf以何种方式使用?