前几天,我决定让python命令默认启动python3而不是python2。
所以我这样做:
sudo update-alternatives --install /usr/bin/python python /usr/bin /python2.7 2
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.5 3
Run Code Online (Sandbox Code Playgroud)
sudo update-alternatives --config python
$ sudo update-alternatives --config python
There are 2 choices for the alternative python (providing /usr/bin/python).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/python3.5 3 auto mode
1 /usr/bin/python2.7 2 manual mode
2 /usr/bin/python3.5 3 manual mode
Press <enter> to keep the current choice[*], or type selection number: 0
Run Code Online (Sandbox Code Playgroud)
而且一切正常。大!:)
$ python -V
Python 3.5.2
Run Code Online (Sandbox Code Playgroud)
但是不久之后,我就意识到在安装和删除python软件包时我已经打破了apt / aptitude的范畴,因为apt期望python2能够实现。
就是这样
$ …Run Code Online (Sandbox Code Playgroud) 所以在我的Django项目中,我有一些不同的应用程序,每个应用程序都有自己的模型,视图,模板等.这些应用程序通信的好方法("Django"方式)是什么?
一个具体的例子是会议应用程序,它有一个会议模型,我有一个家庭应用程序,我想在主页上显示前5个会议.
Home App的View应该只查询Meetings App的模型吗?
感觉就像穿越某条线一样,在Django中可能会有一种更加去耦合的方式来做这样的事情.
该文件welcome.rb包含:
welcome_message = "hi there"
Run Code Online (Sandbox Code Playgroud)
但是在IRB中,我无法访问刚刚创建的变量:
require './welcome.rb'
puts welcome_message
# => undefined local variable or method `welcome_message' for main:Object
Run Code Online (Sandbox Code Playgroud)
当您require进入IRB会话时,引入预定义变量并完成初始化工作的最佳方法是什么?全局变量似乎不是正确的路径.
我正在建立一个流浪汉设置,其中一部分是安装rbenv.我正在使用图书管理员厨师管理我所有的厨师烹饪书,并安装了rbenv和ruby-build.
但是,当我尝试ssh到我的Vagrant虚拟机和类型时,ruby -v我得到了标准的系统安装ruby 1.8.7 (2012-02-08 patchlevel 358) [x86_64-linux].考虑到可能没有安装rbenv,我尝试运行rbenv versions,但事实上安装了rbenv:
vagrant@precise64:~$ rbenv versions
* system (set by /opt/rbenv/version)
Run Code Online (Sandbox Code Playgroud)
那么我试过rbenv install [version]:
vagrant@precise64:~$ rbenv install 1.9.3-p327
[...]
BUILD FAILED
[...]
test -z "/opt/rbenv/versions/1.9.3-p327/include" || /bin/mkdir -p "/opt/rbenv/versions/1.9.3-p327/include"
/bin/mkdir: cannot create directory `/opt/rbenv/versions/1.9.3-p327': Permission denied
Run Code Online (Sandbox Code Playgroud)
失败了Permission denied.我尝试再次安装sudo:
sudo rbenv install 1.9.3-p327
Run Code Online (Sandbox Code Playgroud)
这很有效.然后我rbenv versions再次尝试跑步:
vagrant@precise64:~$ rbenv versions
* system (set by /opt/rbenv/version)
Run Code Online (Sandbox Code Playgroud)
但它仍然说只system安装了ruby.但是,如果我运行它sudo:
vagrant@precise64:~$ sudo rbenv …Run Code Online (Sandbox Code Playgroud) 当通过创建的方法调用时alias_method,__callee__忽略旧方法的名称(此处xxx)并返回新方法的名称,如下所示:
class Foo
def xxx() __callee__ end
alias_method :foo, :xxx
end
Foo.new.foo # => :foo
Run Code Online (Sandbox Code Playgroud)
即使xxx从超类继承,此行为仍然成立:
class Sup
def xxx() __callee__ end
end
class Bar < Sup
alias_method :bar, :xxx
end
Bar.new.bar # => :bar
Run Code Online (Sandbox Code Playgroud)
考虑到上述两种情况,我希望xxx通过模块包含相同的行为.但事实并非如此:
module Mod
def xxx() __callee__ end
end
class Baz
include Mod
alias_method :baz, :xxx
end
Baz.new.baz # => :xxx
Run Code Online (Sandbox Code Playgroud)
我希望返回值:baz不是:xxx.
上面的代码是使用Ruby 2.3.1p112执行的.这是执行中的错误__callee__吗?或者也许是alias_method?如果没有,有人可以解释为什么模块包含行为不同吗?
更新1
我正在尝试重建一个以前没有问题的ios应用程序(首先在6个月左右重建).环境是OSX 10.13.5,包含所有最新更新,Xcode 9.4.1,Ionic为3.20.0.本地cordova,离子和节点模块已更新.
这些插件:
cordova-plugin-device
cordova-plugin-file
cordova-plugin-file-transfer
cordova-plugin-splashscreen
cordova-plugin-whitelist
cordova-plugin-x-socialsharing
配置为手动签名.已重新生成供应配置文件,新证书,下载和安装(多次).
我无法在调试或发布版本中消除此错误:
检查依赖性代码签名错误:找不到匹配'ABM 2018 Dev'的团队'8SEBNER3XM'的配置文件:Xcode找不到与'8SEBNER3XM/ABM 2018 Dev'匹配的任何配置文件.安装配置文件(通过将其拖放到Xcode的停靠项上)或在目标编辑器的"常规"选项卡中选择其他配置文件.代码签名错误:SDK"iOS 11.4"中的产品类型"应用程序"需要代码签名
**存档失败**
以下构建命令失败:检查依赖项(1次失败)错误:命令的错误代码65:带有args的xcodebuild:/ Users/kerickhowlett/Documents/PhoneProjects/ABM/platforms/ios/cordova/build-debug.xcconfig, -workspace,Cocktail Pro.xcworkspace,-scheme,Cocktail Pro,-configuration,Debug,-destination,generic/platform = iOS,-archivePath,Cocktail Pro.xcarchive,archive,CONFIGURATION_BUILD_DIR =/Users/kerickhowlett/Documents/PhoneProjects/ABM /平台/ IOS /建造/设备,SHARED_PRECOMPS_DIR = /用户/ kerickhowlett /文档/ PhoneProjects/ABM /平台/ IOS /构建/ sharedpch
尽管消息说明了,但在Xcode项目的General选项卡和Build Settings(即'ABM 2018 Dev')中,似乎都是完全有效的配置文件.它们匹配Library/MobileDevice/Provisioning Profiles文件夹中的文件.团队ID被验证为正确.配置文件已多次重新生成/重新安装.Xcode认为它们在Xcode中是有效的(不抱怨).作为'离子cordova build ios'运行似乎有不同的意见,并抱怨配置文件.将--release添加到命令中的类似错误.基于反复试验,PROVISIONING_PROFILE_SPECIFIER似乎是问题所在.我尝试了很多变化,但总是得到同样的错误,这似乎是假的.我尝试了两个配置文件名称和UUID.
我错过了什么?
当我尝试"用于开发"触摸(第二代)超过30分钟时,XCode 3.2.5管理器被绞死:

如果我尝试退出,则会显示警告:

我该如何解决?
我有一个代码来检查红宝石中的零.所以我想要实现的是:例如,如果我打电话get_score_value(nil,(nil-1)).我希望ruby延迟评估nil-1直到达到get_score_value函数,而不是在函数传递之前对其进行评估.换句话说,我想将数学表达式作为参数传递给方法.在ruby中最优雅的方法是什么?非常感谢
def get_score_value(value,value2)
value.nil? ? "NULL" : value2.round(2)
end
Run Code Online (Sandbox Code Playgroud)
更新:
我刚刚意识到这个问题实际上与懒惰和严格评估的主题有关.(以下是来自这个伟大的网站:http: //www.khelll.com/blog/ruby/ruby-and-functional-programming/
严格与懒惰的评价
严格评估始终在调用函数之前完全评估函数参数.延迟评估不会评估函数参数,除非需要评估它们的值.懒惰评估的一个用途是由于避免不必要的计算而导致性能提高.
但是,如下例所示,Ruby使用严格的评估策略:
打印长度([2 + 1,3*2,1/0,5-4])=> ZeroDivisionError:除以0
传递数组的第三个参数包含除零操作,并且当Ruby正在进行严格评估时,上面的代码片段将引发异常.
我正在构建一个插件,允许开发人员在类定义中使用简单声明向类添加各种功能(遵循正常的acts_as模式).
例如,使用插件的代码可能看起来像
class YourClass
consumes_my_plugin option1: :value1, specific_method_to_use: :your_method
end
Run Code Online (Sandbox Code Playgroud)
我的问题出现了,因为我想错误地检查为:specific_method_to_use参数提供的值是否作为方法存在,但通常组织和加载代码的方式,该方法尚不存在.
我的插件中的代码暂时看起来像这样:
module MyPlugin
extend ActiveSupport::Concern
module ClassMethods
def consumes_my_plugin(options = {})
raise ArgumentError.new("#{options[:specific_method_to_use]} is not defined") if options[:specific_method_to_use].present? && !self.respond_to?(options[:specific_method_to_use])
end
end
end
Run Code Online (Sandbox Code Playgroud)
这可行:
class YourClass
def your_method; true; end
consumes_my_plugin option1: :value1, specific_method_to_use: :your_method
end
Run Code Online (Sandbox Code Playgroud)
但这是大多数人编写代码的方式,它不会:
class YourClass
consumes_my_plugin option1: :value1, specific_method_to_use: :your_method
def your_method; true; end
end
Run Code Online (Sandbox Code Playgroud)
如何在YourClass加载时失败?我希望它出错,而不是在运行时使用NoMethodError.我可以推迟执行引发ArgumentError的行,直到加载整个类,或者做一些其他聪明的事情来实现吗?