小编Mic*_*ley的帖子

Ruby没有Python,反之亦然?

有很多关于Python与Ruby的讨论,我发现它们完全没有用,因为它们都转向了为什么功能X在语言Y中很糟糕,或者声称语言Y没有X,尽管事实上确实如此.我也确切地知道为什么我更喜欢Python,但这也是主观的,并且不会帮助任何人选择,因为他们可能没有和我一样的开发品味.

因此,客观地列出差异将是有趣的.所以没有"Python的lambdas糟透了".而是解释Ruby的lambdas可以做什么,Python不能.没有主观性.示例代码很好!

请不要在一个答案中有几个不同之处.并且对那些你认识的是正确的进行投票,然后对你所知道的那些是不正确的(或者是主观的).此外,语法上的差异也不大.我们知道Python使用缩进来处理Ruby用括号和结尾做什么,并且@在Python中称为self.

更新:这是一个社区维基,所以我们可以在这里添加很大的差异.

Ruby在类体中有一个类引用

在Ruby中,您可以在类主体中引用类(self).在Python中,在类构造完成之前,您没有对类的引用.

一个例子:

class Kaka
  puts self
end
Run Code Online (Sandbox Code Playgroud)

在这种情况下,self就是类,这段代码会打印出"Kaka".无法打印出类名或以其他方式从Python中的类定义体(外部方法定义)访问该类.

所有类在Ruby中都是可变的

这使您可以开发核心类的扩展.以下是rails扩展的示例:

class String
  def starts_with?(other)
    head = self[0, other.length]
    head == other
  end
end
Run Code Online (Sandbox Code Playgroud)

Python(想象没有''.startswith方法):

def starts_with(s, prefix):
    return s[:len(prefix)] == prefix
Run Code Online (Sandbox Code Playgroud)

您可以在任何序列(不仅仅是字符串)上使用它.为了使用它,你应该明确地导入它,例如,from some_module import starts_with.

Ruby具有类似Perl的脚本功能

Ruby拥有一流的regexp,$ -variables,awk/perl逐行输入循环和其他功能,使其更适合编写munge文本文件的小shell脚本或充当其他程序的粘合代码.

Ruby有一流的延续

感谢callcc声明.在Python中,您可以通过各种技术创建延续,但是该语言没有内置支持.

Ruby有块

使用"do"语句,您可以在Ruby中创建一个多行匿名函数,它将作为参数传递到do前面的方法中,并从那里调用.在Python中,您可以通过传递方法或使用生成器来执行此操作.

红宝石:

amethod { |here|
    many=lines+of+code
    goes(here)
}
Run Code Online (Sandbox Code Playgroud)

Python(Ruby块对应于Python中的不同构造):

with amethod() as here: # `amethod() is a context manager
    many=lines+of+code
    goes(here)
Run Code Online (Sandbox Code Playgroud)

要么

for here in amethod(): # `amethod()` …
Run Code Online (Sandbox Code Playgroud)

ruby python

264
推荐指数
23
解决办法
13万
查看次数

你如何编写一个基于Web的实时协作工具,如谷歌文档?

我真的很好奇

如何编写谷歌文档等协作工具?

我能想到的最接近的事情是编写一个像聊天这样的消息传递系统,然后来回发送消息,以便每个客户端自我更新.

你知道他们编写像这样的小工具的教程/演示吗?

他们使用什么工具来做这种应用?

TIA可以提供任何指示.

architecture real-time system-design

35
推荐指数
1
解决办法
1万
查看次数

jQuery的"文档就绪"功能如何工作?

jQuery如何检查文档是否已加载?如何检查文档加载是否已完成?

jquery

34
推荐指数
3
解决办法
1万
查看次数

如何使用Flux管理异步存储操作?

在关于Flux架构的Facebook讨论中,Jing 在12:17提到调度员强制执行在商店完全处理当前操作之前不能调度任何操作.

https://img.youtube.com/vi/nYkdrAPrdcw/0.jpg

这里的调度员是强制执行没有级联效应的主要部分; 一旦一个动作进入商店,你就不能再放一个,直到商店完全处理完毕.

那么,我的问题是你如何正确处理可能从商店启动的长期运行的异步操作(例如Ajax请求,或处理其他一些异外API) - 阻止完成动作调度的任何事情(例如,等待使用Ajax请求的结果来解析promise)可能会阻止用户调度UI生成的操作.

reactjs reactjs-flux

31
推荐指数
1
解决办法
7052
查看次数

与所有Node JS框架/库等混淆

我感到有点困惑,有很多框架与Node.js相关的'东西'.有人能够给我一个概述 - 以下图书馆/框架/其他相关/互动的方式 - 包含什么或主要目的是什么? - 他们之间的差异

此外,如果还有其他我已经离开我的列表,请随意添加它们以及它们是什么以及它们如何适合的描述.

  • 节点
  • CoffeeScript的
  • 骨干
  • 表达

node.js coffeescript express backbone.js

20
推荐指数
1
解决办法
5482
查看次数

服务应该暴露他们的异步性吗?

我正在编写一个将异步检索数据的服务($ http或$ resource).我可以通过返回一个最初为空的数组来隐藏它是异步的这一事实,但最终会被填充:

.factory('NewsfeedService1', ['$http', function($http) {
   var posts = [];
   var server_queried = false;
   return {
      posts: function() {
         if(!server_queried) {
            $http.get('json1.txt').success(
              function(data) {
                server_queried = true;
                angular.copy(data, posts);
            });
         }
         return posts;
      }
   };
}])
.controller('Ctrl1', ['$scope','NewsfeedService1',
function($scope, NewsfeedService1) {
    $scope.posts = NewsfeedService1.posts();
}])
Run Code Online (Sandbox Code Playgroud)

或者我可以通过回复承诺来暴露异步性:

.factory('NewsfeedService2', ['$http', function($http) {
  var posts = [];
  var server_queried = false;
  var promise;
  return {
     posts_async: function() {
       if(!promise || !server_queried) {
         promise = $http.get('json2.txt').then(
           function(response) {
              server_queried = true;
              posts = …
Run Code Online (Sandbox Code Playgroud)

angularjs angularjs-service

18
推荐指数
3
解决办法
3311
查看次数

在Rails 3中的has_many:through关系中过滤子对象

问候,

我有一个应用程序,其中CompaniesUsers需要通过一个CompanyMembership模型相互拥有,该模型包含有关成员资格的额外信息(具体来说,用户是否是公司的管理员,通过布尔值admin).一个简单的代码版本:

class CompanyMembership < ActiveRecord::Base
  belongs_to :company
  belongs_to :user
end

class Company < ActiveRecord::Base
  has_many :company_memberships
  has_many :users, :through => :company_memberships
end

class User < ActiveRecord::Base
  has_many :company_memberships
  has_many :companies, :through => :company_memberships
end
Run Code Online (Sandbox Code Playgroud)

当然,这使得通过公司company.users.all等所有成员获得简单.但是,我正在尝试获取公司中所有用户的列表,这些用户是该公司的管理员(并且还要测试用户是否是给定公司的管理员).我的第一个解决方案如下company.rb:

def admins
  company_memberships.where(:admin => true).collect do |membership|
    membership.user
  end
end

def is_admin?(user)
    admins.include? user
end
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但它的效率却很低(它会迭代每个成员资格,每次都执行SQL,对吗?或者是比这更聪明的关系吗?),我不确定是否有更好的方法来解决这个问题(可能使用范围或RelationRails 3使用的花哨的新对象?).

任何关于最佳处理方式的建议(最好使用Rails 3最佳实践)将不胜感激!

activerecord has-many-through ruby-on-rails-3

16
推荐指数
2
解决办法
2万
查看次数

如何在Rails 3中的redirect_to调用中允许自定义闪存键

在Rails 3中,您可以直接传递has属性redirect_to来设置flash.例如:

redirect_to root_path, :notice => "Something was successful!"
Run Code Online (Sandbox Code Playgroud)

但是,这仅适用于:alert:notice键; 如果要使用自定义键,则必须使用更详细的版本:

redirect_to root_path, :flash => { :error => "Something was successful!" }
Run Code Online (Sandbox Code Playgroud)

是否有任何方法可以将自定义键(例如:error,上面)传递给redirect_to它而不指定它:flash => {}

redirect ruby-on-rails-3

15
推荐指数
2
解决办法
5805
查看次数

Angular:单击每个单击后,radiobuttons停止触发"ng-change"

我正在动态构建单选按钮.ng-change='newValue(value)按下每个单选按钮一次后停止被调用.

这样做:单击单选按钮会将值更改为foo/bar/baz. http://jsfiddle.net/ZPcSe/19/

<div ng-controller="MyCtrl">
<input type="radio" ng-model="value" value="foo" ng-change='newValue(value)'>
<input type="radio" ng-model="value" value="bar" ng-change='newValue(value)'>
<input type="radio" ng-model="value" value="baz" ng-change='newValue(value)'>    
<hr>
{{value}}
</div>
Run Code Online (Sandbox Code Playgroud)

此代码不会:一旦按下每个单选按钮一次,{{value}} - "label"就不会更新.几乎不会再发生变革了.

<div ng-controller="MyCtrl">
    <span ng-repeat="i in [0, 1, 2]">
    <input name="asdf" type="radio" ng-model="value" value={{i}} ng-change='newValue(value)'>   
    </span>
    {{value}}
</div>
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/ZPcSe/18/

每次控制都是一样的:

var myApp = angular.module('myApp', []);

function MyCtrl($scope) {
    $scope.value = '-';
    $scope.newValue = function(value) {
    $scope.value = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

javascript angularjs

15
推荐指数
1
解决办法
1万
查看次数

乘客上的Rails无法识别RVM

我已经转向使用rvm ree:

rvm use ree@mygemset
Run Code Online (Sandbox Code Playgroud)

并通过Gemfile和bundle install安装了kaminari gem.

但Phusion乘客似乎仍在系统默认目录中查找gem.它说:

Error message:
    Could not find kaminari-0.10.4 in any of the sources (Bundler::GemNotFound)
Run Code Online (Sandbox Code Playgroud)

我错过了什么?Rails需要任何特定的配置来识别我正在使用的当前ruby版本和gemset?

ruby-on-rails passenger rvm

14
推荐指数
1
解决办法
7875
查看次数